web-dev-qa-db-ja.com

Python Pandasファイル名列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")
11
specmer

これはうまくいくはずです:

_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_に変換します。

18
Mike Müller

上記のマイクの答えは完全に機能します。グーグルが次のエラーに遭遇した場合:

>>> 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)
0
Daniel Butler