2017-07-15 10 views
1

は、以下の例を参照してください。関数が外部のオブジェクトを変更するのはなぜですか?

def func(arg): 
    print(id(arg)) 
    df = pd.DataFrame(arg) 
    print(id(df)) 
    df['b'] = [4,5,6] 

a = pd.DataFrame({'a' : [1,2,3]}) 

print(a, id(a)) 

func(a) 

print(a) 
    a 
0 1 
1 2 
2 3 
681924702104 
681924702104 
681924718944 
    a b 
0 1 4 
1 2 5 
2 3 6 

なぜ関数を呼び出した後に変更?私は特に彼らはすべての異なるIDを持っているので、それを得ることはありません。これを修正する正しい手続きは何でしょうか?

+0

'df = pd.DataFrame(arg); df ['b'] = [4,5,6] 'modify' arg'?私はそのクラスに精通していません。 – Carcigenicate

+0

わかりませんが、1:新しい「DataFrame」オブジェクトを作成しましたが、元のデータを変更するようです。 –

答えて

2

pd.DataFrame()は、データをコピーするかどうかを指定する引数をとります。デフォルトはFalseです。コピーが必要な場合は、Trueに設定してください。

df = pd.DataFrame(arg, copy=True) 

これはあなたの例を修正します。

+0

または 'df = a.copy()'です。 – hpaulj

+0

しかし、aとdfは異なる識別情報を持っているため([リンク](https://docs.python.org/2/library/functions.html#id)に従って異なるオブジェクトです)、どのようにaを変更することができますかdfに列 'b'を追加しますか? – JohnnyS

関連する問題