最近需要对多个excel中数万条数据进行随机抽样,采用python进行。 excel读取和写入使用openpyxl第三方库。 随机抽样使用random.sample函数。 (抽取遇到的最大问题是不知道如何读取指定一行,采取直接读取的rows=ws.rows这样生成的是一个生成器对象,并不能写入,一直遇到提示错误 ValueError: Cells cannot be copied from other worksheets 最后采取自定义函数的方式,还是得单个单元格读取value,一行一行读出来。) 初学python,方法笨拙,如果各位有更好的处理方法,万望赐教。
代码:
import openpyxl
import random
#定义一个函数,获取excel指定行的数据。
def get_row_value(ws,row):
col_num=ws.max_column
row_data=[]
for i in range(1,col_num+1):
cell_value=ws.cell(row=row,column=i).value
row_data.append(cell_value)
return row_data
file_name_list=[]#将文件名集合放在一个列表。
for file_name in file_name_list:
#读取
wb=load_workbook(file_name)
sheet=wb.active
row_num=sheet.max_row
random_num=random.sample(range(2,row_num+1),20)#随机抽取20个样本,第一行是表头,不取。
#写入一个新的excel表格
wb2=openpyxl.Workbook()
sheet2=wb.active
sheet2.append(get_row_value(sheet,1))#自定义的函数,传入两个参数,一个是前文读取的文件,一个是要读取的行数。
#读取随机抽取的行数并写入。
for i in random_num:
row=get_row_value(sheet2,i)
sheet.append(row)
sheet.append(['生成的随机数为:']+random_num)
#保存
out_file_name=file_name+'_out.xlsx'
wb.save(out_file_name)
print('抽样成功')
|