gpt4 book ai didi

python - 多个 CSV 合并为一个,文件名作为 Pandas 中的列名

转载 作者:行者123 更新时间:2023-12-01 00:32:18 24 4
gpt4 key购买 nike

我有一个目录,里面有一百个 CSV 文件。其中一个 CSV 看起来像这样;

Time    ID
09:00 A
.. ..

我想将所有 csv 连接到一个数据框中,并包含文件名(按 axis=1 附加)我使用了这段代码:

files = glob.glob(data/*.csv')
df = pd.concat([pd.read_csv(fp).assign(File=os.path.basename(fp).split('.')[0]) for fp in files], axis=1)
df.to_csv('new.csv')
df

我得到的结果看起来像这样

Time    ID  File  Time  ID  File    ..
09:00 A 01 09:00 B 02 ..
.. .. .. .. .. .. ..

我想将ID列名与文件名连接起来作为列名。我的预期结果如下所示:

Time    01_ID   Time    02_ID   ..
09:00 A 09:00 B ..
.. .. .. .. ..

最佳答案

您可以先使用字典理解:

comp = {os.path.basename(fp).split('.')[0]: pd.read_csv(fp) for fp in files}
df = pd.concat(comp, axis=1)

然后在列表理解中进行过滤以转换列中的MultiIndex:

df.columns = [f"{a}_{b}" if b == 'ID' else b for a, b in df.columns]
print (df)
Time 01_ID Time 02_ID
0 09:00 A 09:00 B

df.to_csv('new.csv')

编辑:更好的解决方案是创建唯一的列名称:

df.columns = df.columns.map('_'.join)
print (df)
01_Time 01_ID 02_Time 02_ID
0 09:00 A 09:00 B

关于python - 多个 CSV 合并为一个,文件名作为 Pandas 中的列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58091637/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com