まず、パンダのデータフレームは基本的には参照渡しです。これは、データフレームを変数に代入した場合、変数はデータフレームのメモリ上の場所を参照することになります。したがって、変数を介してデータフレームを変更すると、元のデータフレームも変更されます。
例えば、次のコードを考えてみましょう:
import pandas as pd
df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df2 = df1 # df2はdf1を参照している
df2['A'] = [7, 8, 9] # df2を変更する
print(df1)
このコードを実行すると、df1の内容が変更されていることがわかります。これは、df2がdf1を参照しており、df2の変更が元のデータフレームに反映されるためです。
しかし、データフレームのコピーを作成することで、参照渡しではなく値渡しを実現することもできます。これにはいくつかの方法があります。
copy()
メソッドを使用する方法:
import pandas as pd
df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df2 = df1.copy() # df1のコピーを作成する
df2['A'] = [7, 8, 9] # df2を変更する
print(df1)
この場合、df2はdf1のコピーを参照しているため、df2の変更はdf1に反映されません。
DataFrame()
コンストラクタを使用する方法:
import pandas as pd
df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df2 = pd.DataFrame(df1) # df1のコピーを作成する
df2['A'] = [7, 8, 9] # df2を変更する
print(df1)
この方法も同様に、df2の変更がdf1に反映されません。
したがって、データフレームの参照渡しまたは値渡しは、使用するコードのコンテキストに依存します。データフレームを変更したくない場合は、コピーを作成する方法を使用することをお勧めします。