我的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")
答案 0 :(得分:16)
这应该有效:
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
。
答案 1 :(得分:0)
迈克的上述回答非常有效。如果有任何Google员工遇到以下错误:
>>> 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)