前言:
当前姐妹们对“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打印出全部的列名称