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