【问题标题】: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)
    

    【讨论】:

      猜你喜欢
      • 2019-11-14
      • 1970-01-01
      • 2018-05-20
      • 2020-08-28
      • 1970-01-01
      • 2020-10-05
      • 2016-11-22
      • 2017-08-03
      相关资源
      最近更新 更多