怎样从excel随机抽取多行

你好!

需求详述:

有个Excel工作簿,里面存了几个sheet,需要从每个工作表中随机抽取n行,存入新表格中。另外,新表格要根据原来的工作表名称命名,以便查找结果。
本次用python实现,有Excel插件叫方方格子也可以随机抽取,但结果不是期望的亚子,可能我的打开方式有问题,大家感兴趣可以试一下,有时间再详述区别~

上代码:

from openpyxl import *
import pandas as pd
import random

'''从桌面某个Excel工作簿中的每个sheet随机抽取30行,并分别输出'''
#给出文件信息
file_locate ='C:/Users/Administrator/Desktop/'#文件存放路径
workbook_name = input('请输入存放在桌面的指定工作簿的完整名称。 '+
                '例如存放在桌面的《北京各部门.xlsx》 '+
                '应输入:北京各部门.xlsx 请输入:')#文件全名
filename=file_locate+workbook_name

#用openpyxl的方法将表格数据读入
wb = load_workbook(filename)
count_worksheets = len(wb.worksheets)#统计一共几张工作表
# print(count_worksheets)
for sheet_index in range(count_worksheets):
    ws = wb.worksheets[sheet_index]
    results = []
    for row in ws.iter_rows():
        results.append([cell.value for cell in row])

    # 获取当前处理的表格的名字、记录数量
    print('第',sheet_index+1,'张表(共',count_worksheets,'张):')
    print('当前使用的表格:',ws)
    print(ws, '共有', len(results)-1, '条数据')

    # 获取当前sheet的名称,用于给新表命名
    re_table_name = str(ws)[12:-2]

    # 把当前表的数据放到DataFrame,开始选取
    df = pd.DataFrame(results)
    chosed_rows_num = []
    chosed_rows_num.clear()
    print('初始的选中行号chosed_rows_num',chosed_rows_num)
    for need_rows in range(30):#这里可以自定义抽取的行数,目前为30行
        j = random.randint(1, len(results)-1)    
        #注意!如果随机数上限包含len(results),一旦抽中它,就会报错,因为index只到len(results)-1,已处理
        chosed_rows_num.append(j)

	#输出结果
    new_df = df.iloc[[0] + chosed_rows_num]
    print('最后的选中行号chosed_rows_num:',chosed_rows_num)
    new_df.to_excel('C:/Users/Administrator/Desktop/' + re_table_name + '.xlsx', header=False, index=True)
    print('第',sheet_index+1,'张表',ws,'已处理\n')
    chosed_rows_num.clear()

小提示:

文件名(即上文中的workbook_name)可以右键单击存放在桌面的工作簿-属性-复制文件名即可。另外,注意windows路径是\作区隔,python中要用/。
在这里插入图片描述
以上。

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值