问题描述

pd.read_excel() 效率低

先说明一下如果单纯地使用 read_excel 方法,会导致效率极其低下,因为 read_excel 第一个参数是要传 path(如:r’C:\Users\Desktop\贷款\data.xlsx’)给计算机,每一次循环都要再传一次,简直慢的不要不要的,而 ExcelFile 则是一个类,给计算机循环传类就不会存在这种问题。
以下是传统方法:

  1. wb = xlrd.open_workbook(r'C:\Users\Desktop\贷款\data.xlsx')
  2. # 获取workbook中所有的表格
  3. sheets = wb.sheet_names()
  4. data2 = pd.DataFrame()
  5. for i in range(len(sheets)):
  6. df2 = pd.read_excel(r'C:\Users\Desktop\贷款\data.xlsx'', sheet_name=sheets[i], index=False, encoding='utf8',converters={'外呼任务批次':str,'座席工号':str})
  7. data2 = data2.append(df2)
  8. print(i)
  9. print(sheets[i])

优化方案

这里要介绍一下国外大神的方法:附链接(https://stackoverflow.com/questions/26474693/excelfile-vs-read-excel-in-pandas/38560203#38560203),以下是搬运过来的。
从技术上讲,ExcelFile 是一个类,read_excel 是一个函数。无论哪种情况,实际的解析都是由中_parse_excel 定义的方法处理的 ExcelFile。所以可以使用以下两种传类的方法来进行。
PS: 我这个 excel 每一个 sheet 有上万行,共有 30 多个 sheet。

1、ExcelFile + read_excel 方法

  1. xl = pd.ExcelFile(path)
  2. for name in xl.sheet_names:
  3. df = pd.read_excel(xl, name)

2、ExcelFile + parse 方法。

  1. xl = pd.ExcelFile(path)
  2. for name in xl.sheet_names:
  3. df = xl.parse(name)

下面是实际运行代码

  1. import pandas as pd
  2. def read_excel1(path):
  3. data_xlsx = pd.ExcelFile(path)
  4. print(data_xlsx.sheet_names)
  5. data=pd.DataFrame()
  6. for name in data_xlsx.sheet_names:
  7. df=data_xlsx.parse(sheet_name=name,converters={'外呼任务批次':str,'座席工号':str,'问卷调查结果':str})
  8. # data[name]=df
  9. data = data.append(df)
  10. # print(df)
  11. print(name)
  12. return data
  13. path=r'C:\Users\Desktop\贷款\data.xlsx'
  14. data=read_excel1(path)
  1. import pandas as pd
  2. def read_excel1(path):
  3. data_xlsx = pd.ExcelFile(path)
  4. print(data_xlsx.sheet_names)
  5. data=pd.DataFrame()
  6. for name in data_xlsx.sheet_names:
  7. df=data_xlsx.read_excel(data_xlsx,sheet_name=name, encoding='utf8',converters={'外呼任务批次':str,'座席工号':str,'问卷调查结果':str})
  8. # data[name]=df
  9. data = data.append(df)
  10. # print(df)
  11. print(name)
  12. return data
  13. path=r'C:\Users\Desktop\贷款\data.xlsx'
  14. data=read_excel1(path)

https://blog.csdn.net/weixin_43581124/article/details/108015535