python - 读取多个 csv 文件并将文件名添加为 Pandas 中的新列

标签 python csv pandas operating-system glob

我在一个文件夹中有多个 csv 文件,我想在一个数据框中全部打开它们并插入一个具有相关文件名的新列。到目前为止,我编写了以下代码:

import pandas as pd
import glob, os
df = pd.concat(map(pd.read_csv, glob.glob(os.path.join('path/*.csv'))))
df['filename']= os.path.basename(csv)
df

这给了我想要的数据框,但在新的“文件名”列中,它只列出了文件夹中每一行的最后一个文件名。我正在寻找每一行以其关联的 csv 文件填充。不仅仅是文件夹中的最后一个文件。

非常感谢对这位新手的任何帮助。

最佳答案

我想你需要assign为了在 loop 中添加新列,还将参数 ignore_index=True 添加到 concat用于删除 index 中的重复项:

测试文件是a.csv , b.csv , c.csv .

import pandas as pd
import glob, os


files = glob.glob('samples_for_so/*.csv')
print (files)
#['samples_for_so\\a.csv', 'samples_for_so\\b.csv', 'samples_for_so\\c.csv']


df = pd.concat([pd.read_csv(fp).assign(New=os.path.basename(fp)) for fp in files])
print (df)
   a  b  c  d    New
0  0  1  2  5  a.csv
1  1  5  8  3  a.csv
0  0  9  6  5  b.csv
1  1  6  4  2  b.csv
0  0  7  1  7  c.csv
1  1  3  2  6  c.csv

files = glob.glob('samples_for_so/*.csv')
df = pd.concat([pd.read_csv(fp).assign(New=os.path.basename(fp).split('.')[0]) 
       for fp in files])
print (df)
   a  b  c  d New
0  0  1  2  5   a
1  1  5  8  3   a
2  0  9  6  5   b
3  1  6  4  2   b
4  0  7  1  7   c
5  1  3  2  6   c

关于python - 读取多个 csv 文件并将文件名添加为 Pandas 中的新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42756696/

相关文章:

asp.net - 无需物理路径,将文件上传控件中的 CSV 直接插入到内存流中

python - Keras:如何实现LSTM的目标复制?

python - 如何获得 geodjango 的 k 个最近邻居?

python - gevent:调试旋转线程?

python - 如何检查文件夹中的文件是否与 .csv 文件中指定的文件名一致?

python - 通过 Excel 在 CSV 中保留前导 "+"

python - 如何将不同的 DataFrame 组合成一个分组条形图

python - 在其他两个日期之间插入一个日期以获得一个值

python - 通过对 pandas 进行采样,用不同的元素填充数据框中的空值

python - 忽略 Tensorflow 日志记录警告