excel - 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')
如何为使用的每个文件添加包含文件名的列?
谢谢
解决方案
创建一个字典来收集您的数据框,然后在导出之前将它们组合起来(并使用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')
推荐阅读
- f# - 为什么 dotnet-fantomas 需要 FSharp.Core,Version=4.4.1.0?
- c++ - 插入指针数组删除先前的结果
- javascript - 在注入大部分html期间Angular2中的微调器
- javascript - 在外观不起作用的js中添加onlick事件侦听器
- c# - 为什么 LINQ 不喜欢内联日期计算?
- java - Java 1.8 和 tomcat 6.0.53 原因:java.io.EOFException:SSL 对等体错误关闭
- python - 使用 Django rest framework 3.6.2 和 python 3 连接到 Couchdb
- python - 在使用 **kwargs 时分配 *args
- angular - 从一个组件到另一个组件的角度路由
- html - 在 app.component.ts 内时未读取按钮功能