場景:
選擇DataFrame 的子集時,很常見到使用.copy() 方法明確複製父DataFrame 的程式碼。問題出現了:為什麼這是必要的?
推理:
Pandas 資料幀的行為與傳統程式語言陣列不同。當索引 pandas DataFrame(例如 my_dataframe[features_list])時,傳回的值不會建立新副本,而是傳回原始 DataFrame 的檢視或參考。對此視圖所做的任何修改都會直接影響原始 DataFrame。
範例:
考慮以下程式碼:
df = pd.DataFrame({'x': [1, 2]}) df_view = df[0:1] # Returns a view of the first row df_view['x'] = -1 # Check the original DataFrame print(df)
輸出:
x 0 -1 1 2
如您所見,修改df_view 也修改了原始df DataFrame。
解決方案:
為防止此類意外後果,建議在修改 DataFrame 之前使用 .copy() 方法複製它。這可確保副本所做的任何變更都不會影響原始 DataFrame。
修訂後的代碼:
df = pd.DataFrame({'x': [1, 2]}) df_copy = df[0:1].copy() # Makes a copy of the first row df_copy['x'] = -1 # Check the original DataFrame print(df)
輸出:
x 0 1 1 2
在這種情況下,df保持不變。
資料框複製的好處:
以上是為什麼在選擇 Pandas DataFrame 的子集時應該使用 .copy()?的詳細內容。更多資訊請關注PHP中文網其他相關文章!