Python Pandas 添加文件名列 CSV

Python Pandas add Filename Column CSV

我的 python 代码在下面的例子中工作正常。我的代码组合了一个 CSV 文件目录并匹配 headers。但是,我想更进一步 - 如何添加一个列来附加所用 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")

这应该有效:

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.

Mike 上面的回答非常有效。如果任何 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)

files 变量包含当前目录中的所有 csv 文件列表。如 ['FileName1.csv',FileName2.csv']。您还需要删除 ".csv"。您可以使用 .split() 函数。下面是简单的逻辑。这对你有用。

files = glob.glob("*.csv") 
for i in files:
    
    df=pd.read_csv(i)
    df['New Column name'] = i.split(".")[0]
    df.to_csv(i.split(".")[0]+".csv")