在Pandas 中,選擇資料框的一部分時,通常的做法是使用'.copy() ' 方法建立原始資料幀的副本。這種方法確保子集所做的任何變更都不會影響父資料框。
為什麼要複製?
預設情況下,索引資料框會傳回原始資料框的視圖,而不是副本。這意味著對子集所做的任何修改都將直接影響父資料框。為了保持父資料框的完整性,必須使用“.copy()”方法建立副本。
不複製的後果
考慮以下程式碼片段:
df = pd.DataFrame({'x': [1, 2]}) df_sub = df.iloc[0:1] df_sub.x = -1
在此範例中,df_sub 是 df 的視圖。因此,將df_sub.x 設為-1 也會修改df.x:
print(df) x 0 -1 1 2
複製的好處
複製資料框可確保父資料框保持不變。當對一個資料框執行多個操作時,這一點尤其重要,並且保留原始資料以供以後分析或比較至關重要。
df_sub_copy = df.iloc[0:1].copy() df_sub_copy.x = -1 print(df) x 0 1 1 2
在此修改後的程式碼片段中,df_sub_copy 是 df 的副本。因此,更改 df_sub_copy.x 對 df 沒有影響。
注意: 需要注意的是,在較新版本的 Pandas 中,資料幀索引的行為已發生變化。在 Pandas 1.0 及更早版本中,索引資料框預設回傳一個副本。然而,在 Pandas 1.1 及更高版本中,索引會傳回一個視圖。為了確保跨版本的行為一致,建議在建立資料幀子集時始終使用“.copy()”方法。
以上是為什麼在選擇子集時應該始終複製 Pandas DataFrame?的詳細內容。更多資訊請關注PHP中文網其他相關文章!