Python 读取多个csv文件,并将文件名作为新列添加到文件中
我在一个文件夹中有几个csv文件,我想在一个数据框中打开它们,并插入一个带有相关文件名的新列。到目前为止,我已经编写了以下代码:Python 读取多个csv文件,并将文件名作为新列添加到文件中,python,csv,pandas,operating-system,glob,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 这给了我想要的数据帧,但在新列“filename”中,它只列出了文件夹
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
这给了我想要的数据帧,但在新列“filename”中,它只列出了文件夹中每一行的最后一个文件名。我正在寻找每一行都要填充它的相关csv文件。不仅仅是文件夹中的最后一个文件
非常感谢您为这个新手提供的任何帮助。首先,您没有定义csv变量 但无论如何,这种行为是有意义的,因为您在最后使用csv,所以它将被设置为最后一个文件。 理想情况下,您可以再次使用glob获取所有文件名,然后将其设置为新列
#this is a Python list containing filenames
csvs = glob.glob(os.path.join('path/*.csv'))
#now set the csv into a pd series
csv_paths = pd.Series(csvs)
df['file_name'] = csv_paths.values
我认为您需要在循环
中添加新列,同时还添加了参数ignore_index=True
,以便在索引
中删除重复项:
用于测试的文件是
什么是
csv
-没有定义变量csv
。我得到ValueError:值的长度与索引的长度不匹配,因为每个文件都有多行数据。
import pandas as pd
import glob, os
files = glob.glob('files/*.csv')
print (files)
['files\\a.csv', 'files\\b.csv', 'files\\c.csv']
files = glob.glob('files/*.csv')
print (files)
['files\\a.csv', 'files\\b.csv', 'files\\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
2 0 9 6 5 b.csv
3 1 6 4 2 b.csv
4 0 7 1 7 c.csv
5 1 3 2 6 c.csv
files = glob.glob('files/*.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