Python Pandas添加文件名列CSV

27
我的Python代码在下面的例子中运行正确。我的代码将CSV文件目录合并并匹配标题。但是,我想再进一步——如何添加一个列,该列追加使用的CSV文件的文件名?

我的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")
3个回答

43

这应该可以工作:

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


太棒了。我就知道这很容易!谢谢你。 - specmer

0

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

0

Mike的回答完美地解决了问题。如果有任何谷歌用户遇到以下错误:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接