2016-07-21 14 views
0

私は別のデータフレームにロードするファイルのリストが長いです。しかし、パンダはそんなことは何もしていないように見えるので、私はこれをするのに苦労しています。私の例では、file_mapは実際にインポートされるので、変数とファイル名の間に静的マッピングを持つことはできません。この例では、ループ内で、pyhtonが新しい変数dfを作成するため、私が探しているものは得られません。何らかの形で、辞書からの古い変数を実際に指し、これをpd.read_csvが返すものに設定する方法はありますか?Python pandas繰り返しで既存のデータフレームに割り当てる

columns = ['c1', 'c2', 'c3'] 
df_d1 = pd.DataFrame() 
df_d2 = pd.DataFrame() 


file_map = { 
    'data_1.csv': df_d1, 
    'data_2.csv': df_d2, 
} 


for file_name , df in file_map.items(): 

    df = pd.read_csv(path + file_name, 
       header=None, 
       sep=";", 
       names=columns, 
       parse_dates = {'dateTime': ['c1']}, 
       ) 

また、私がここでやっていることよりも、これを一般的に処理する方法がありますか?提案は

答えて

1

歓迎されている。ここ実際にはうまく機能したアプローチです:

import glob 
import os 

dataframes = {} 
for fn in glob('/path/to/files/<pattern>.csv'): 
    df = pd.read_csv(fn, ...) 
    dataframes[os.path.basename(fn)] = df 

ここdataframesは、データフレームの辞書です。私はglobを使って実際のファイルリストを取得していますが、もちろんこのリストはどこからでも来ることができます。 os.path.basenameは、/path/to/files部分のないファイル名だけを返します。

は、代わりに、あなたは、同じデータフレーム内のすべてのデータがあなたにも行うことができますしたい場合:ループの最後に

data = None 
for fn in glob('/path/to/files/<pattern>.csv'): 
    df = pd.read_csv(fn, ...) 
    df['source'] = os.path.basename(fn) 
    data = pd.concat([data, df]) if data is not None else df 
ここ

dataは、すべてのデータを持つデータフレームです。もちろん、これはファイルが同じコンテンツタイプであると仮定します。つまり、実際には1つのデータフレームが必要です。

+0

私が作ることができる唯一の追加は 'sys.argv'からファイル名を取ることです。 – frist

+0

ああ、あなたのファイル名はあなたが知っている名前の下に保存されていますか?私は必ずしもファイル名を知っているとは限りません。これが私がdf_1にマップしようとした理由です。 – chrise

+0

ここにあなたの意図を理解しているかどうかわかりません。上記はファイル名から独立しています...あなたがどこか他の場所からファイル名のリストを取得した場合、 'glob(...)'を実際の名前のリストに置き換えてください。 – miraculixx

関連する問題