Python Pandas添加Filename Column CSV

时间:2017-01-25 17:16:09

标签: python pandas dataframe glob

我的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")

2 个答案:

答案 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)