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

jam*_*eng 3 python excel dataframe python-3.x pandas

我需要使用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)
Run Code Online (Sandbox Code Playgroud)

在此过程中,我发现该过程相当缓慢,
因此,read_excel只能读取有限的行以提高速度吗?
我试图NROWS但没有work..still慢..

jpp*_*jpp 6

阅读所有工作表,不要猜测

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

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

# access 'Sheet1' worksheet
res = dfs['Sheet1']
Run Code Online (Sandbox Code Playgroud)

限制行数或列数

您可以使用parse_colsskip_footer参数来限制列和/或行的数量。这将减少读取时间,并且也可以使用sheetname = None

例如,以下内容将读取前3列,如果工作表中有100行,则仅读取前20列。

df = pd.read_excel('file.xlsx', sheetname=None, parse_cols='A:C', skip_footer=80)
Run Code Online (Sandbox Code Playgroud)

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

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)
Run Code Online (Sandbox Code Playgroud)

改善表现

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

例如,一种选择是使用VBA脚本将Excel工作表转换为CSV文件。然后使用pd.read_csv