【Python】pandas:DataFrameで”=”を使うときの注意(参照渡し)

DataFrameで”=”を使うと、DataFrameのデータは参照渡しになる。

※参照渡し:変数の受け取り側が変数を参照できる形式で、変数を渡す方法のこと。参照渡しを行った変数の内容を、呼び出し先で変更すると、呼び出し元の変数を直接操作するのと同じ状態になる。

例えば、 0埋めしたDataFrameがあるとする。

data_df= pd.DataFrame(index=range(3), columns=['val1', 'val2'])
data_df.fillna(0, inplace=True)
print(data_df)

    val1  val2
0     0     0
1     0     0
2     0     0

“=”で参照渡しをし、値を書き換える。

new_data_df = data_df
new_data_df.val1[2] = 3
new_data_df.val2[0] = 5

元のデータも値が変わる。

# data_df
    val1  val2
0     0     5
1     0     0
2     3     0

# new_data_df
    val1  val2
0     0     5
1     0     0
2     3     0

参照渡ししたくないとき(単にDataframeをコピーしたいとき)は、copy()を使う。

new_data_df = data_df.copy()
new_data_df.val1[2] = 3
new_data_df.val2[0] = 5

コピー先だけ変更され、元のDataframeはコピー先の変更の影響を受けない。

# data_df
    val1  val2
0     0     0
1     0     0
2     0     0

# new_data_df
    val1  val2
0     0     5
1     0     0
2     3     0

コメント