龙空技术网

自动化办公问题:Python将30W条Excel数据按列分组统计速度怎么样

你的老师父 1667

前言:

当前姐妹们对“python打印出全部的列名称”大体比较重视,小伙伴们都想要了解一些“python打印出全部的列名称”的相关文章。那么小编在网摘上网罗了一些有关“python打印出全部的列名称””的相关知识,希望你们能喜欢,朋友们一起来学习一下吧!

昨天关于这篇 Python自动化办公之:Excel按列分组统计数据并保存到sheet 文章中,有朋友提问30W的数据速度怎么样,我做了一个测试,并且对代码进行了优化。

办公中如果需要此场景,可以直接拿去用

代码测试

依旧是使用前,需要安装pandas和xlrd

pip install xlrdpip install pandas

代码如下:

import pandas as pdimport timestart_time = time.time()# 读取Excel文件df = pd.read_excel("SampleXlxFile_53000kb_clean.xlsx")total = df.groupby(df.columns[1])[df.columns[5]].sum()    # 创建ExcelWriter对象,并将结果写入另一个sheet中with pd.ExcelWriter("SampleXlxFile_53000kb_clean.xlsx", engine="openpyxl", mode="a") as writer:    total.to_excel(writer, sheet_name="employee_cost2")    end_time = time.time()total_time = end_time - start_timeprint('分组执行时间:', total_time, '秒')

我找来一个测试数据,清洗之后,一共35W条数据,如下:

在i5九代的电脑上运行分组后,结果如下:

PS D:\Workspace\Python\python_basic_learn> & "D:/Program Files/Python38/python.exe" d:/Workspace/Python/python_basic_learn/excel_group_2.py分组执行时间: 140.15434956550598 秒PS D:\Workspace\Python\python_basic_learn>

代码优化

之后针对以上代码做了优化,代码如下:

import openpyxlimport pandas as pdimport time    def clean() :    # 读取 Excel 文件    data = pd.read_excel('SampleXlxFile_53000kb.xlsx', header=None)    # 删除第10列有数据的行    data = data[data.iloc[:, 9].isnull()]    # 删除第2列是数字的行    data = data[pd.to_numeric(data.iloc[:, 1], errors='coerce').isna()]        # 删除不能转换为 float 类型的行    if 'E' in data.columns:        # 删除不能转换为 float 类型的        data = data[pd.to_numeric(data['E'], errors='coerce').notnull()]    # 将结果写入到新的 Excel 文件中    with pd.ExcelWriter('SampleXlxFile_53000kb_clean.xlsx') as writer:        data.to_excel(writer, sheet_name='Sheet1', index=False)    def group() :    # 打开 Excel 文件    workbook = openpyxl.load_workbook('SampleXlxFile_53000kb_clean.xlsx')    # 选择第一个工作表    worksheet = workbook.active    employee_cost = {}    # 遍历每一行数据    for row in worksheet.iter_rows(min_row=2, values_only=True):        cost = float(row[4])                employee = row[1]                if employee in employee_cost:            employee_cost[employee] += cost        else:            employee_cost[employee] = cost    # 将员工消费字典转换为DataFrame    department_attendance_df = pd.DataFrame(list(employee_cost.items()), columns=['employee', 'cost'])    # 将结果写入到另一个sheet中    with pd.ExcelWriter('SampleXlxFile_53000kb_clean.xlsx', engine="openpyxl", mode='a') as writer:        department_attendance_df.to_excel(writer, sheet_name='employee_cost', index=False)        if __name__ == '__main__' :    start_time = time.time()    clean()    end_time = time.time()    total_time = end_time - start_time    print('清洗执行时间:', total_time, '秒')        start_time = time.time()    group()    end_time = time.time()    total_time = end_time - start_time    print('分组执行时间:', total_time, '秒')

这段代码实现了对 Excel 文件进行数据清洗和分组统计的功能。下面是对代码的详细解释:

import 语句导入了需要使用的模块,包括 openpyxl 和 pandas 用于处理 Excel 文件,以及 time 用于计时。clean() 函数实现了对 Excel 文件进行数据清洗的功能。

首先使用 pd.read_excel() 函数读取 SampleXlxFile_53000kb.xlsx 文件,将其存储为 DataFrame。接着使用 data.iloc[:, 9].isnull() 删除第10列有数据的行,使用 pd.to_numeric(data.iloc[:, 1], errors='coerce').isna() 删除第2列是数字的行。

然后,使用 data['E'] 检查是否存在不能转换为 float 类型的行,使用 pd.to_numeric(data['E'], errors='coerce').notnull() 删除这些行。

最后,使用 pd.ExcelWriter() 函数将清洗后的结果写入到 SampleXlxFile_53000kb_clean.xlsx 文件中。group() 函数实现了对 Excel 文件进行分组统计的功能。

首先使用 openpyxl.load_workbook() 函数打开 SampleXlxFile_53000kb_clean.xlsx 文件,并选择第一个工作表。

然后,使用一个字典 employee_cost 存储每个员工的消费金额。接着,使用 worksheet.iter_rows() 函数遍历每一行数据,获取员工名称和消费金额。将消费金额转换为浮点数类型,并将其添加到字典中对应的员工键上。

最后,将 employee_cost 字典转换为 DataFrame,并使用 pd.ExcelWriter() 函数将结果写入到 SampleXlxFile_53000kb_clean.xlsx 文件的另一个工作表中。if __name__ == '__main__' : 语句用于判断该模块是否作为主程序运行。如果是,则执行以下代码:

a. 使用 time.time() 函数获取当前时间,并将其存储在 start_time 变量中。

b. 调用 clean() 函数进行数据清洗,并使用 time.time() 函数获取当前时间,并将其存储在 end_time 变量中。计算清洗过程的执行时间,并将结果存储在 total_time变量中。最后使用 print() 函数打印清洗过程的执行时间。

c. 使用 time.time() 函数获取当前时间,并将其存储在 start_time 变量中。

d. 调用 group() 函数进行分组统计,并使用 time.time() 函数获取当前时间,并将其存储在 end_time 变量中。计算分组统计过程的执行时间,并将结果存储在 total_time 变量中。最后使用 print() 函数打印分组统计过程的执行时间。

以下是执行时间

PS D:\Workspace\Python\python_basic_learn> & "D:/Program Files/Python38/python.exe" d:/Workspace/Python/python_basic_learn/big_excel_group.py清洗执行时间: 93.58055853843689 秒分组执行时间: 100.79152178764343 秒PS D:\Workspace\Python\python_basic_learn>

标签: #python打印出全部的列名称