【问题标题】:Python Pandas add Filename Column CSVPython Pandas 添加文件名列 CSV
【发布时间】:2017-06-10 23:47:49
【问题描述】:
我的 python 代码在下面的示例中可以正常工作。我的代码组合了一个 CSV 文件目录并匹配标题。但是,我想更进一步 - 如何添加一个附加所用 CSV 文件名的列?
import pandas as pd
import glob
globbed_files = glob.glob("*.csv") #creates a list of all csv files
data = [] # pd.concat takes a list of dataframes as an agrument
for csv in globbed_files:
frame = pd.read_csv(csv)
data.append(frame)
bigframe = pd.concat(data, ignore_index=True) #dont want pandas to try an align row indexes
bigframe.to_csv("Pandas_output2.csv")
【问题讨论】:
标签:
python
pandas
dataframe
glob
【解决方案1】:
这应该可行:
import os
for csv in globbed_files:
frame = pd.read_csv(csv)
frame['filename'] = os.path.basename(csv)
data.append(frame)
frame['filename'] 创建一个名为filename 的新列,os.path.basename() 将类似/a/d/c.txt 的路径转换为文件名c.txt。
【解决方案2】:
上面迈克的回答完美无缺。万一任何 googlers 遇到以下错误:
>>> TypeError: cannot concatenate object of type "<type 'str'>";
only pd.Series, pd.DataFrame, and pd.Panel (deprecated) objs are valid
这可能是因为分隔符不正确。我使用的是自定义 csv 文件,所以分隔符是 ^。因此,我需要在 pd.read_csv 调用中包含分隔符。
import os
for csv in globbed_files:
frame = pd.read_csv(csv, sep='^')
frame['filename'] = os.path.basename(csv)
data.append(frame)