我的問題是關於熊貓DataFrame在通過引用傳遞時的不可變性。考慮下面的代碼:通過引用傳遞熊貓DataFrame
import pandas as pd
def foo(df1, df2):
df1['B'] = 1
df1 = df1.join(df2['C'], how='inner')
return()
def main(argv = None):
# Create DataFrames.
df1 = pd.DataFrame(range(0,10,2), columns=['A'])
df2 = pd.DataFrame(range(1,11,2), columns=['C'])
foo(df1, df2) # Pass df1 and df2 by reference.
print df1
return(0)
if __name__ == '__main__':
status = main()
sys.exit(status)
輸出是
A B
0 0 1
1 2 1
2 4 1
3 6 1
4 8 1
和不
A B C
0 0 1 1
1 2 1 3
2 4 1 5
3 6 1 7
4 8 1 9
事實上,如果FOO被定義爲
def foo(df1, df2):
df1 = df1.join(df2['C'], how='inner')
df1['B'] = 1
return()
(即「加入「聲明之前的其他陳述)然後輸出僅僅是
A
0 0
1 2
2 4
3 6
4 8
我好奇,爲什麼是這種情況。任何見解,將不勝感激。
順便說一句,回報是不是一個函數,它只是一個說法,這樣你就不會後所需要的支架。 – Jezzamon
[This](http://nedbatchelder.com/text/names.html)是我知道Python名稱工作方式的最佳討論。一旦你明白了,你就會理解這種行爲。 – chthonicdaemon
謝謝@chthonicdaemon! – labrynth