我有数百个 excel 文件,我想创建一个 df,在一列中包含 excel 文件的名称,然后在第二列中包含每个选项卡的名称。我的脚本将遍历每个文件名,但我 append 的方式不正确,而且我找不到解决方案。
os.chdir(r'C:\Users\mbobak\Documents\\')
FileList = glob.glob('*.xlsx')
tabs= pd.DataFrame(columns=['filename','tabs'])
for filename in FileList:
xl = pd.ExcelFile(filename).sheet_names
tabs= tabs.append([filename,xl])
期望的输出:
filename tabs
doc1.xlsx tab1
doc1.xlsx tab2
doc1.xlsx tab3
doc1.xlsx tab4
doc2.xlsx tab1
doc2.xlsx tab2
doc2.xlsx tab3
请您参考如下方法:
这是一种方法。一步创建数据框是一种很好的做法,也是一种高效的做法。这是因为 append 到列表比 append 到数据框更便宜。
FileList = glob.glob('*.xlsx')
def return_files_tabs(FileList):
for filename in FileList:
for sheet in pd.ExcelFile(filename).sheet_names:
yield [filename, sheet]
df = pd.DataFrame(list(return_files_tabs(FileList)),
columns=['Filename', 'Tab'])
解释
- 循环遍历
sheet_names属性中的每个文件和每个工作表。 - 通过生成器生成文件名和工作表。
- 根据耗尽的生成器列表构建数据框,命名列。
