在 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中文网其他相关文章!