我需要使用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)
在这个过程中,我发现这个过程非常慢,
那么,可以只读取有限的行来提高速度吗<我试过nrows,但没有成功。。还是慢。。
将sheetname=None
参数用于pd。阅读excel
。这将把所有工作表读入数据帧字典。例如:
dfs = pd.read_excel('file.xlsx', sheetname=None)
# access 'Sheet1' worksheet
res = dfs['Sheet1']
您可以使用parse_cols
和skip_footer
参数来限制列数和/或行数。这将减少读取时间,并且也适用于sheetname=无
。
例如,以下内容将读取前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)慢。如果你想提高性能,我强烈建议你考虑其他格式。
例如,一个选项是使用VBA脚本将Excel工作表转换为CSV文件;然后使用pd.read_csv
。