2017-05-26 57 views
0

我是python的新手。 我不明白大熊貓在分配pd.DataFrame到新變量時遵循的原則。 在以下示例中,我希望a保留其值,並且在將新元素添加到b後不會更改。 下面是一個類似np.array的例子,它展示了預期的行爲。 有人可以對此有所瞭解嗎?在熊貓和numpy python中的對象和變量分配

謝謝!

>>> import pandas as pd 
>>> import numpy as np 

>>> a=pd.DataFrame([[18, 'F'],[50, 'M']],columns = ('Age','Sex')) 
>>> print(a) 

    Age Sex 
0 18 F 
1 50 M 

>>> b=a 
>>> print(b) 

    Age Sex 
0 18 F 
1 50 M 

>>> b.loc[b.index.max() + 1] = [30,'M'] 
>>> print(b) 

    Age Sex 
0 18 F 
1 50 M 
2 30 M 

>>> print(a) 

    Age Sex 
0 18 F 
1 50 M 
2 30 M 

>>> c=np.array([[18,'F'],[50,'M']]) 
>>> print(c) 

[['18' 'F'] 
['50' 'M']] 

>>> d=c 
>>> print(d) 

[['18' 'F'] 
['50' 'M']] 

>>> d = np.append(d,[[30,'M']], axis=0) 
>>> print(d) 

[['18' 'F'] 
['50' 'M'] 
['30' 'M']] 

>>> print(c) 

[['18' 'F'] 
['50' 'M']] 

回答

1

當你這樣做b=aab是完全相同的對象都引用。通過一個名字進行的任何更改通過其他名稱同樣可見。

d=c的情況略有不同,因爲你算賬重新分配dnp.append()的結果,這是記錄爲總是返回一個新的對象(而不是就地修改的對象)。從那時起,cd是獨立的對象。

+0

現在很清楚謝謝你! –

0

你可以試試:

b = a.copy() 

那麼B就不會在修改改,因爲他們指的是兩個不同的對象。

回到問題,a和b指的是同一個對象,b.loc[b.index.max() + 1] = [30,'M']只是修改了對象,因此print(a)print(b)都改變了。

雖然c和d指的是同一個對象,但d = np.append(d,[[30,'M']], axis=0)更新了d,這意味着現在d指的是一個新的對象。但c仍然是指舊對象。

+0

現在很清楚謝謝你! –