首页 > 解决方案 > pandas 系列副本不创建副本

问题描述

所以我对pd.Series.copy()行为感到非常困惑。根据1,它将创建一个深层副本,因此更改副本的值应使原始行(和数据框)保持不变。那么为什么这会返回 True 呢?

for i, row in df.iterrows():        
    q = row.copy()
    q.col.append(['foo'])
    return row.col == q.col

标签: pandascopydeep-copy

解决方案


首先,您应该注意 q 是一个 pd.Series。

根据 pd.Series.copy的文档

“进行深度复制,包括数据和索引的副本。使用 deep=False 时,既不复制索引也不复制数据。请注意,当复制 deep=True 数据时,不会递归复制实际的 python 对象,只有引用对象。这与标准库中的 copy.deepcopy 形成对比,后者递归地复制对象数据。

这就是为什么只复制对列表的引用,而不是列表本身。您可能应该在手动复制列表的位置应用自定义功能。


推荐阅读