如何动态获取文件列表的工作表名称



我有以下所有文件列表:

['Input_controls\CTA-02 Q2.xlsx',
'Input_controls\CTA-14 Q2.xlsx',
'Input_controls\CTA-23 Q2.xlsx',
'Input_controls\CTA-57 Q2.xlsx',
'Input_controls\PVHE FMS GRC CTA Analysis Q2 2021.xlsx',
'Input_controls\PVHE FMS GRC SoD Analysis Q2 2021.xlsx',
'Input_controls\SOD-16 Q2.xlsb',
'Input_controls\SOD-21_Q2.xlsx',
'Input_controls\SOD-74 Q2.xlsx']

现在我想要一份包含所有文件及其各自表格的df所以理想的输出是:

file                             sheet_name#1 sheet_name#2 sheet_name#x
'Input_controls\CTA-02 Q2.xlsx'  foo           bar           test

以上针对每个输入文件

我起草了以下代码,但它一直在执行(从未停止(:

#bad
#xl = pd.ExcelFile('archvio.xlsx')
df_combined = pd.DataFrame()
for file in allfiles:
xl = pd.ExcelFile(file)
for sheet_name in xl.sheet_names:
df = xl.parse(sheet_name)
df['sheet'] = sheet_name       # this adds `sheet_name` into the column `Week`
df_combined = df_combined.append(df)

我是第一个回答的!我的意思是,你能做的就是在最后添加一个break,仅此而已!很简单,对吧?修复了下面的代码!

#not bad anymore
#xl = pd.ExcelFile('archvio.xlsx')
df_combined = pd.DataFrame()
for file in allfiles:
xl = pd.ExcelFile(file)
for sheet_name in xl.sheet_names:
df = xl.parse(sheet_name)
df['sheet'] = sheet_name       # this adds `sheet_name` into the column `Week`
df_combined = df_combined.append(df)
break

IIUC,您可以使用一个简单的字典理解:

df = pd.concat({f: pd.Series(pd.ExcelFile(f).sheet_names).rename(lambda x: x+1)
for f in files}, axis=1).T.add_prefix('sheet_')

这里有一个熊猫测试样本的例子:

sheet_1    sheet_2   sheet_3 sheet_4
times_1904.xlsx                  Sheet1        NaN       NaN     NaN
test_types.xlsx                  Sheet1        NaN       NaN     NaN
testmultiindex.xlsx  single_column_name  mi_column  mi_index    both