如何使用Python组合多个CSV,并在列中包含filename作为条目?

2024-10-03 17:17:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用Python/pandas组合多个CSV。但是,我需要将每个CSV的文件名作为新“文件名”列中的条目包含在输出中

例如:

csv文件:

  • QB305707.csv
  • QB305708.csv
  • QB305709.csv

每个csv中的列:

^{tb1}$

合并所有csv后的预期输出:

^{tb2}$

谢谢你的帮助


Tags: 文件csvpandas文件名条目tb2tb1qb305709
2条回答

虽然@anky的解决方案在理想情况下是正确的,但我认为也可以通过以下方式实现:

逐个导入CSV文件后,请执行以下操作:

filename1 = os.path.basename("path/to/file/QB305707.csv")
csv1Data = pd.read_csv(filename1)
# Assuming you did this with different variable names for each file

dfcsv1Data['filename'] = filename1
# Do this for all three DFs and simply concat / append all three dataframes together

您可以在读取循环中的文件时使用df.assign,或者在pd.concat中使用keys

list_of_files = ['path\QB305707.csv','path\QB305708.csv','path\QB305709.csv']
out = pd.concat((pd.read_csv(file).assign(filename=file) for file in list_of_files))

或者使用keys创建一个单独级别的带有文件名的索引

pd.concat((pd.read_csv(file) for file in list_of_files),keys=list_of_files )

如果文件夹中还没有文件列表,可以先使用以下代码段获取文件列表:

import glob
list_of_files  = glob.glob(r'path_to_folder\*.csv')

最后的代码如下所示:

import glob
import os
list_of_files  = glob.glob(r'path_to_folder\*.csv')
out = pd.concat((pd.read_csv(file).assign(filename=os.path.split(file)[-1])
                 for file in list_of_files))

相关问题 更多 >