如何在 pandas 中使用 read_excel 提高处理速度?

Posted

技术标签:

【中文标题】如何在 pandas 中使用 read_excel 提高处理速度?【英文标题】:How to increase process speed using read_excel in pandas? 【发布时间】:2018-11-14 16:27:56 【问题描述】:

我需要使用 pd.read_excel 来处理一个 excel 文件中的每一张纸。 但在大多数情况下,我不知道工作表名称。 所以我用这个来判断excel中有多少张:

i_sheet_count=0
i=0
try:
  df.read_excel('/tmp/1.xlsx',sheetname=i)
  i_sheet_count+=1
  i+=1
else:
  i+=1
print(i_sheet_count)

在这个过程中,我发现这个过程很慢, 那么,read_excel能否只读取有限的行来提高速度? 我尝试了 nrows 但没有成功..仍然很慢..

【问题讨论】:

那你有什么问题?查找所有 sheet_names 或读取限制行? 【参考方案1】:

阅读所有工作表而不用猜测

pd.read_excel 使用sheetname = None 参数。这会将所有工作表读入数据框字典。例如:

dfs = pd.read_excel('file.xlsx', sheetname=None)

# access 'Sheet1' worksheet
res = dfs['Sheet1']

限制行数或列数

您可以使用parse_colsskip_footer 参数来限制列数和/或行数。这将减少阅读时间,也适用于sheetname = None

例如,以下将读取前 3 列,如果您的工作表有 100 行,它将只读取前 20 行。

df = pd.read_excel('file.xlsx', sheetname=None, parse_cols='A:C', skip_footer=80)

如果您希望应用特定于工作表的逻辑,可以通过提取工作表名称来实现:

sheet_names = pd.ExcelFile('file.xlsx', on_demand=True).sheet_names

dfs = 
for sheet in sheet_names:
    dfs[sheet] = pd.read_excel('file.xlsx', sheet)

提高性能

将 Excel 文件读入 Pandas 自然比其他选项(CSV、Pickle、HDF5)要慢。如果您希望提高性能,我强烈建议您考虑这些其他格式。

例如,一个选项是use a VBA script 将您的 Excel 工作表转换为 CSV 文件;然后使用pd.read_csv

【讨论】:

太完美了!非常感谢

以上是关于如何在 pandas 中使用 read_excel 提高处理速度?的主要内容,如果未能解决你的问题,请参考以下文章

使用 python 中 pandas 的 read_excel 函数将日期保留为字符串

请问在Pandas用read_excel函数读取数据

无法使用 pandas.read_excel 访问 .xlsx 文件中的数据

在pandas read_excel中获取Excel单元格背景颜色?

带有超链接的 Pandas read_excel

访问 pandas.read_excel() 转换器中 ValueError 的详细信息