2017-12-27 29 views
0

で複数のデータフレームで動作しますエレガントな方法は、私は現在、このようなコードのビットを持っているパンダ

if os.path.isfile('D:\\df_1'): 
    df_1 = pd.read_pickle('D:\\df_1') 
else: 
    df_1 = pd.DataFrame(columns = ['Date', 'Location', 'Product']) 
if os.path.isfile('D:\\df_2'): 
    df_2 = pd.read_pickle('D:\\df_2') 
else: 
    df_2 = pd.DataFrame(columns = ['Date', 'Location', 'Product']) 

[...] 

if os.path.isfile('D:\\df_20'): 
    df_20 = pd.read_pickle('D:\\df_20') 
else: 
    df_20 = pd.DataFrame(columns = ['Date', 'Location', 'Product']) 

基本的に私はデータフレームがすでに存在する場合、それはそれをロードしない場合は、チェックしてやっていますそれ以外の場合は、空のデータフレームを作成します。これは、コードが新しいデータを各データフレームに追加しようとするためです。だから私は、のようなものがあります:

[retrieve new data and clean it] 
df_1 = pd.concat([df_1, df_1_new_data]) 

は私が持っているすべての20個のデータフレームのためにこれを行います(彼らは別のものが含まれているが、私は別のそれらを維持したい)、その後、日、再びそれらを取得するために、それらを保存します後に、彼らに新しいデータを追加します。今すぐ

df_1.to_pickle('D:\\df_1') 
df_2.to_pickle('D:\\df_2') 
[...] 
df_20.to_pickle('D:\\df_20') 

、それはすでに20個のデータフレームでそれを行うのは非常に重いですが、私はおそらくいくつかのより多くを追加する必要があります!さまざまなデータフレームを読み込み、forループやこれに似たものをpickleに書き込む方法はありますか?だから私は多くのためのコードの行を減らすために、私は今、単純な2行のループを持っている?ありがとうございました!

+0

なぜあなたはループでこれらのことをしていませんか? –

+0

私は変数名を動的に作成する必要があり、これはやりにくいことがわかります。 – giga

+0

辞書を使用します。 –

答えて

2

DRY:同じものを何度も書き込むべきではありません。

関数、ループ、その他の基本言語ツールを使用します。

def create_df(path): 
    if os.path.isfile(path): 
     df = pd.read_pickle(path) 
    else: 
     df = pd.DataFrame(columns = ['Date', 'Location', 'Product']) 
    return df 

all_paths = (...) 

# dict where key is you path and value is dataframe  
all_df = {p: create_df(p) for p in all_paths} 

for p in all_paths: 
    all_df[p].to_pickle(p) 
関連する問題