我有一個Python腳本,它做了以下作業:
我有一個Python腳本。
final_df = main_df
final_df['new_column'] = final_df['b']*0.05。
基本上,我不想干擾main_df資料框架,并在它的副本上作業。但是當運行上述腳本時,final_df和main_df都以類似的方式影響。為什么會發生這種情況呢?
uj5u.com熱心網友回復:
使用copy方法:
final_df = main_df.copy()
uj5u.com熱心網友回復:
你必須深度復制它,否則它將指向同一個物件。 所以它將是
final_df = main_df.copy() # by default deep copy is done。
這里是指向檔案的鏈接。
uj5u.com熱心網友回復:
原因是當你做final_df = main_df時,main_df的副本沒有被創建,而只是創建了一個新的參考final_df,從而使final_df和main_df都參考到同一個記憶體位置。因此,如果其中一個被改變了,比如在你的例子中的final_df,這個改變也會反映到main_df中,因為兩者都指向同一個記憶體位置。
例子:
main_df = ['final'/span>, 'df'/span>]
final_df = main_df
print (f'Location of final_df: {id(final_df)}')
print (f'Location of main_df: {id(main_df)}')
上述兩個print陳述句將列印同一個記憶體位置。
這里是很好的寫法來理解這種行為。
如果你不希望你的main_df不受影響,可以創建一個深度拷貝,如下:
final_df = main_df.copy()
通過copy(),一個完整的新副本被創建,可以用下面的代碼來驗證:
from copy import copy
main_df = ['final'/span>, 'df'/span>]
final_df = main_df.copy()
print (f'Location of final_df: {id(final_df)}')
print (f'Location of main_df: {id(main_df)}')
現在這兩個print陳述句將列印2個不同的記憶體位置。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/306634.html
標籤:
