如何将多个项目附加到pandas df?

Mar*_*bak 2 python append dataframe pandas

我有数百个 Excel 文件,我想创建一个 df,其中一列中包含 Excel 文件的名称,第二列中包含每个选项卡的名称。我的脚本将迭代每个文件名,但我附加的方式不正确,而且我没有太多运气找到解决方案。

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

期望的输出:

filename    tabs
doc1.xlsx   tab1
doc1.xlsx   tab2
doc1.xlsx   tab3
doc1.xlsx   tab4
doc2.xlsx   tab1
doc2.xlsx   tab2
doc2.xlsx   tab3
Run Code Online (Sandbox Code Playgroud)

jpp*_*jpp 5

这是一种方法。一步创建数据框是一种高效且良好的做法。这是因为附加到列表比附加到数据帧更便宜。

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

解释

  • 循环浏览sheet_names属性内的每个文件和每个工作表。
  • 通过生成器生成文件名和工作表。
  • 从耗尽的生成器列表、名称列构建数据框。