我在一个文件夹中有多个 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
中的重复项:
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/