从python中的xlsx文件中的一组行中获取一个随机项

问题描述 投票:-1回答:2

我有一个xlsx文件,例如:

A  B  C  D  E  F  G
1  5  2  7  0  1  8
3  4  0  7  8  5  9
4  2  9  7  0  6  2
1  6  3  2  8  8  0
4  3  5  2  5  7  9
5  2  3  2  6  9  1

是我的价值观(实际上是在excel文件上)。我需要得到它的随机行,但是对于列D值是分开的。

您可以注意到,列D的值为7,值为2。

我需要得到列D上有7个所有行的1个随机行和列D上有2个所有行的1个随机行。

并将结果放在另一个xlsx文件上。

我的预期输出需要是第0,1或2行的内容以及第3,4或5行的内容。

有人可以帮助我吗?谢谢!

python excel random
2个回答
1
投票

我已经创建了代码。下面的代码假定excel名称是test.xlsx,并且与您运行代码的文件夹位于同一文件夹中。它从D列中的每个唯一值中对NrandomLines进行采样并打印出来。

import pandas as pd
import numpy as np
import random
df = pd.read_excel('test.xlsx') # read the excel

vals = df.D.unique() # all unique values in column D, in your case its only 2 and 7

idx = []
N = []
for i in vals: # loop over unique values in column D
    locs = (df.D==i).values.nonzero()[0]
    idx = idx + [locs]  # save row index of every unique value in column D    
    N = N + [len(locs)] # save how many rows contain specific value in D



NrandomLines = 1 # how many random samples you want 

for i in np.arange(len(vals)): # loop over unique values of D
    for k in np.arange(NrandomLines): # loop how many random samples you want 
        randomRow = random.randint(0,N[i]-1) # create random sample

        print(df.iloc[idx[i][randomRow],:])  # print out random row

1
投票

使用OpenPyXl,您可以使用Worksheet.iter_rows迭代工作表行。

您可以使用itertools.groupby根据“D”列值对行进行分组。为此,您可以创建一个小函数来连续获取此值:

def get_d(row):
    return row[3].value

然后,您可以使用random.choice随机选择一行。

把所有东西放在一起,你可以:

def get_d(row):
    return row[3].value


for key, group in itertools.groupby(rows, key=get_d):
    row = random.choice(list(group))
    print(row)
© www.soinside.com 2019 - 2024. All rights reserved.