2017-05-08 9 views
0

私はパンダのデータフレームに問題があります。 Pandas/Pythonは元のDFの修正を行うのではなく、コードのどこかにDFのコピーを生成するようです。パンダ - インプレース、ビュー、コピーの混乱

以下のコードでは、 "update_df"は、以前の機能で削除されたはずの "file_exists"列のDFを引き続き表示します。

MAIN:

if __name__ == '__main__': 
    df_main = load_df() 
    clean_df2(df_main) 
    update_df(df_main, image_path_main) 
    ..... 

clean_df2

def clean_df2(df): #remove non-existing files from DF 
    df['file_exists'] = True # add column, set all to True? 
    ..... 
    df = df[df['file_exists'] != False] #Keep only records that exist 
    df.drop('file_exists', 1, inplace=True) # delete the temporary column 
    df.reset_index(drop=True, inplace = True) # reindex if source has gaps 

update_df:あなたが行うとき

def update_df(df, image_path): #add DF rows for files not yet in DF 
    print(df) 
    .... 

答えて

1

私は思う:

df = df[df['file_exists'] != False] 

元のdfのコピーを作成しました。

あなたがあなたの機能を変更することができ、それを動作させるために:、

df = clean_df2(df) 
+0

いっそ 'に行を変更します。

def clean_df2(df): #remove non-existing files from DF df['file_exists'] = True # add column, set all to True? ..... return df 

そして、あなたはclean_df2(DF)を呼び出すときに、次の手順を実行しますdf.drop(df ['file_exits']!= False、inplace = True) ' –

+0

これは別のオプションです。関数内で簡単にコピーを作成できます。最終的なdfを返すことはおそらくより安全な選択肢です。 – Allen

+0

私は、メモリの理由からデータフレームをコピーしないようにしたいと思うことがあります。 –