首页 > 解决方案 > Pandas 将文件名添加到 Excel 组合文件

问题描述

我有一个将多个 excel 文件组合在 1 个文件中的代码,但我需要添加一列,其中包含所用文件的名称(文件名)。

这是代码:

import os
import pandas as pd
cwd = os.path.abspath('') 
files = os.listdir(cwd)  

## Code gets the first sheet of a given file
df = pd.DataFrame()
for file in files:
    if file.endswith('.xlsx'):
        df = df.append(pd.read_excel(file), ignore_index=True) 
df.head() 
df.to_excel('Combined.xlsx')

如何为使用的每个文件添加包含文件名的列?

谢谢

标签: excelpandas

解决方案


创建一个字典来收集您的数据框,然后在导出之前将它们组合起来(并使用pathlib而不是os模块):

import pathlib
import pandas as pd

data = {}
for file in pathlib.Path().glob('*.xlsx'):
    data[file.name] = pd.read_excel(file)
pd.concat(data).to_excel('Combined.xlsx')

注意:如果要获取不带扩展名的文件名,请使用file.stem而不是file.name.

更新

当要合并的 excel 文件超过 1 张时怎么办?

import pathlib
import pandas as pd

data = []
names = []
for file in pathlib.Path().glob('?.xlsx'):
    for df in pd.read_excel(file, sheet_name=None).values():
        names.append(file.name)
        data.append(df)
pd.concat(data, keys=names).to_excel('Combined.xlsx')

推荐阅读