Python 随机提取Excel中部分数据并输出为新表格

将60000行数据的excel提取其中10%作为模型测试集,并将提取剩下的数据输出为另一个文件

import openpyxl
import random
from openpyxl import load_workbook

#PATH #路径名
INPUT_FILES_BASE_PATH ="D:\\Users\\User\\Desktop\\"
EXCEL_FILENAME = 'name.xlsx'

def get_row_value(ws,row):
    col_num = ws.max_colum
    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

for i in range(1):
    
    #input #输入
    wb = load_workbook(r"{}".format(INPUT_FILES_BASE_PATH) + "{}".format(EXCEL_FILENAME))
    sheet = wb.active
    row_num = sheet.max_row
    #Take 10% of the sample at random, leaving the first row of table heads alone.
    # Variable function to achieve different random extraction rates
    # 随机抽取10%样本,第一行表头不取。可更改函数实现不同随机抽取率
    random_num = random.sample(range(2,row_num+1),row_num//10)

    #Write into new form #写入表格
    
    #RandomExtract part #随即提取的部分
    wb2 = openpyxl.Workbook()
    sheet2 = wb2.active
    sheet2.append(get_row_value(sheet,1))
    for j in random_num:
        sheet2.append(get_row_value(sheet,j))
   
    #sheet2.append(['The random number generated is:'] + random_num)
    # If a random number needs to be generated, it is printed to the last row of the table
    #sheet2.append(['生成的随机数为:'] + random_num) 若需要生成的随机数,则会输出到表格最后一行

    #output #输出
    out_file_name1 = 'RandomExtract.xlsx'
    wb2.save(out_file_name1)

    # Remainder #剩下的部分
    wb3 = openpyxl.Workbook()
    sheet3 = wb3.active
    sheet3.append(get_row_value(sheet, 1))
    for m in range(2,row_num+1):
        if m not in random_num:
            sheet3.append(get_row_value(sheet, m))

    # output #输出
    out_file_name2 = 'RandomRemain.xlsx'
    wb3.save(out_file_name2)

    print('Success extract')

***************************************************************************

2022-11-07补充:

发现有的朋友会运行时候遇到下面问题:

AttributeError: 'Worksheet' object has no attribute 'max_colum'

这个报错可能有一下几个原因:

1、我的openpyxl版本号是3.0.9,版本不同的话可能函数名不一样,或者有的版本干脆删除了这个函数。所以检查你的版本号或者直接安装我这个版本会解决问题

2、 excel文件读取保存后缀要是.xlsx, 如果是.xls可能会报错

3、未安装Xlsxwriter,可参考:https://www.pythonheidong.com/blog/article/505502/0419a71691120e53ac8f/ (我没遇到过这种情况)

  • 5
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
### 回答1: 可以使用Python的pandas和numpy库来计算两列数据的pearson相关系数,具体代码如下: ```python import pandas as pd import numpy as np # 生成两列数据 data1 = np.random.rand(10) data2 = np.random.rand(10) # 将两列数据转换为pandas的DataFrame格式 df = pd.DataFrame({'data1': data1, 'data2': data2}) # 计算pearson相关系数 corr = df.corr(method='pearson')['data1']['data2'] print('pearson相关系数为:', corr) ``` 这段代码会生成两列长度为10的随机数据,并计算它们的pearson相关系数。你可以将这段代码的data1和data2替换为你自己的数据,然后运行即可得到结果。 ### 回答2: 生成Excel表格两列数据的皮尔逊相关系数,可以使用Python的pandas和numpy库来实现。 首先,需要安装pandas和numpy库,可以使用pip命令进行安装。 ```python pip install pandas pip install numpy ``` 接下来,可以使用以下代码来读取Excel表格数据,并计算两列数据的皮尔逊相关系数。 ```python import pandas as pd import numpy as np # 读取Excel表格 data = pd.read_excel('data.xlsx') # 获取需要计算相关系数的两列数据 column1 = data['列名1'] column2 = data['列名2'] # 计算皮尔逊相关系数 correlation = np.corrcoef(column1, column2)[0][1] print("两列数据的皮尔逊相关系数为:", correlation) ``` 需要注意的是,上述代码的'data.xlsx'是Excel表格的文件名,'列名1'和'列名2'是要计算相关系数的两列数据的列名,根据实际情况进行修改。 以上就是使用代码生成Excel表格两列数据的皮尔逊相关系数的方法,输出结果为相关系数的值。 ### 回答3: 要使用代码生成Excel表格两列数据的Pearson相关系数,首先需要安装合适的Python库,如pandas和numpy。然后按照以下步骤进行操作: 1. 导入所需库: ```python import pandas as pd import numpy as np ``` 2. 读取Excel文件数据: ```python data = pd.read_excel('文件路径.xlsx') ``` 其,'文件路径.xlsx'是Excel文件的路径,可以根据实际情况进行修改。 3. 提取需要计算相关系数的两列数据: ```python column1 = data['列名1'] column2 = data['列名2'] ``` 其,'列名1'和'列名2'分别是在Excel需要计算相关系数的两列数据的列名,需要根据实际情况进行修改。 4. 计算Pearson相关系数: ```python correlation_coefficient = np.corrcoef(column1, column2)[0, 1] ``` 5. 打印Pearson相关系数: ```python print("Pearson相关系数为:", correlation_coefficient) ``` 最后,运行代码即可得到Excel表格两列数据的Pearson相关系数的计算结果。 注意:在使用之前确保已经安装了pandas和numpy库,可以通过以下命令进行安装: ```python pip install pandas numpy ```
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值