可変スコープを関数呼び出しで理解しようとしています。可変スコープの関数
議論するコード。
import numpy as np
import pandas as pd
# Function to add a column with random stuff to a dataframe
def Add_a_column(df):
df['Col2']= np.sign(np.random.randn(len(df)))
return df
# Create a dataframe with random stuff
df_full = pd.DataFrame(data=np.sign(np.random.randn(5)), columns=['Col1'])
df_another = Add_a_column(df_full)
- df_fullはグローバルです。正しい?
- df_anotherはグローバルです。正しい?
- dfはAdd_a_columnのローカルです。正しい?
私は、コードを実行すると、列がのは、私が関数によって変更されているdf_full避けるにはどうすればよい
In[8]: df_full
Out[8]:
Col1 Col2
0 -1.0 -1.0
1 1.0 -1.0
2 -1.0 1.0
3 1.0 1.0
4 1.0 1.0
をdf_fullするために追加されますか?
* name * 'df'は関数に対してローカルですが、' df'と 'df_full'は*同じ*オブジェクトを参照します。 –
は、関数内でdf_fullをクローンし、新しいオブジェクトを操作してからそれを返すように聞こえます。 – Fallenreaper
@DanielRosemanが言ったことを少し広げて、パンダについて何も知らないうちに、 'Add_a_column'関数に渡す前に' df_full'をコピーする必要があると思いますか? (https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.copy.htmlを参照)、なぜこれが起こるのかを読んでください:https://stackoverflow.com/q/2612802/289011 – BorrajaX