我有多个csv,我想使用Python/panda组合它们。但是,我需要将每个csv的文件名作为一个新的"filename"列中的条目包含在输出中。
例如:
csv文件:
- QB305707.csv
- QB305708.csv
- QB305709.csv
每个csv:中的列
Id | 电压 | 电流 |
---|---|---|
1151616 | 242 | 1.5|
151617 | 240 | <1.4>
您可以在读取循环中的文件时使用df.assign
,也可以在pd.concat
:中使用keys
list_of_files = ['pathQB305707.csv','pathQB305708.csv','pathQB305709.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))
虽然@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