複数の csv ファイルを読み取り、ファイル名を pandas の新しい列として追加する 質問する

複数の csv ファイルを読み取り、ファイル名を pandas の新しい列として追加する 質問する

1 つのフォルダーに複数の csv ファイルがあり、それらをすべて 1 つのデータフレームで開き、関連付けられたファイル名を持つ新しい列を挿入したいと考えています。これまでに、次のようにコーディングしました。

import pandas as pd
import glob, os
df = pd.concat(map(pd.read_csv, glob.glob(os.path.join('path/*.csv'))))
df['filename']= os.path.basename(csv)
df

これにより、必要なデータフレームが得られますが、新しい列「ファイル名」には、各行のフォルダー内の最後のファイル名のみがリストされます。各行に関連付けられた csv ファイルが取り込まれることを望んでいます。フォルダー内の最後のファイルだけではありません。

この初心者へのどんな援助でも大歓迎です。

ベストアンサー1

必要だと思うassignに新しい列を追加するためにloop、パラメータもignore_index=True追加されましたconcat重複を削除するにはindex:

テスト用のファイルは.csvファイル.csvファイルcsvファイル

import pandas as pd
import glob, os


files = glob.glob('samples_for_so/*.csv')
print (files)
#['samples_for_so\\a.csv', 'samples_for_so\\b.csv', 'samples_for_so\\c.csv']


df = pd.concat([pd.read_csv(fp).assign(New=os.path.basename(fp)) for fp in files])
print (df)
   a  b  c  d    New
0  0  1  2  5  a.csv
1  1  5  8  3  a.csv
0  0  9  6  5  b.csv
1  1  6  4  2  b.csv
0  0  7  1  7  c.csv
1  1  3  2  6  c.csv

files = glob.glob('samples_for_so/*.csv')
df = pd.concat([pd.read_csv(fp).assign(New=os.path.basename(fp).split('.')[0]) 
       for fp in files])
print (df)
   a  b  c  d New
0  0  1  2  5   a
1  1  5  8  3   a
2  0  9  6  5   b
3  1  6  4  2   b
4  0  7  1  7   c
5  1  3  2  6   c

おすすめ記事