Python 将文件名附加到pandas中的csv文件
我正在尝试将我的CSV文件的文件名作为列名附加到这些CSV文件中,我有基本的想法和代码,只是无法将其集成到我当前的代码中。这可能很容易 这就是我读取CSV文件并将其附加到数据框中的方式Python 将文件名附加到pandas中的csv文件,python,python-3.x,Python,Python 3.x,我正在尝试将我的CSV文件的文件名作为列名附加到这些CSV文件中,我有基本的想法和代码,只是无法将其集成到我当前的代码中。这可能很容易 这就是我读取CSV文件并将其附加到数据框中的方式 big_frame = pd.concat([pd.read_csv(f, skiprows=0 , header=None , index_col= False ,names=col_Names) for f in glob.glob('filepath' + "/*.csv")],
big_frame = pd.concat([pd.read_csv(f, skiprows=0 , header=None , index_col= False ,names=col_Names) for f in glob.glob('filepath' + "/*.csv")],
ignore_index=True)
我知道我只需要在代码的某个地方添加这两行
frame['filename'] = os.path.basename(f)
f.append(frame)
有什么帮助吗
例如,我有3个CSV文件,每个文件的列名如下所示
Column A Column B Column C
我想将它们连接在一个大数据框架中,并添加一个新列,该列具有原始CSV文件名,如
Column A Column B Column C filename
file 1
file 2
file 3
您可以使用,也可以使用从模块打开文件
使用afterread\u csv
在读取列后立即添加列:
big_frame = pd.concat([pd.read_csv(f, ...).assign(filename=os.path.basename(f))
for f in glob.glob('filepath' + "/*.csv")],
ignore_index=True)
(…
引用所有其他参数以读取\u csv
)
其他变化:
pd.concat()。它只是使用了比所需更多的内存,而且由于您正在从磁盘读取数据,因此没有提供任何性能改进。当您使用生成器表达式时,它将需要额外的括号。请注意额外的缩进以确保可读性:
big_frame = pd.concat((pd.read_csv(f, ...).assign(filename=os.path.basename(f))
for f in glob.glob('filepath' + "/*.csv")),
ignore_index=True)
filepath
是一个变量名,而不是实际路径:
glob.glob(os.path.join(filepath, '*.csv'))
或者使用pathlib.Path
和Path.glob
作为死神的答案
big_frame = pd.concat((pd.read_csv(f,
skiprows=0,
header=None,
index_col=False,
names=col_Names,
).assign(filename=os.path.basename(f))
for f in glob.glob(os.path.join(filepath, '*.csv'))
),
ignore_index=True)
顺便说一句,我在大量阅读CSV时会这样做,除了我不使用basename,因为我希望包含文件的完整路径。从不同来源/目录读取相同格式的CSV时特别有用。您能发布预期的output@deadshot顺便说一句,@deadshot的回答也很好。我花了更长的时间来打字e和张贴额外的东西。请随意。
big_frame = pd.concat((pd.read_csv(f,
skiprows=0,
header=None,
index_col=False,
names=col_Names,
).assign(filename=os.path.basename(f))
for f in glob.glob(os.path.join(filepath, '*.csv'))
),
ignore_index=True)