python - 在 pandas 中复制时意外更改 df
问题描述
让 df 成为数据的我的 pandas 数据框并 dfcopy 其副本,
data = [[1,['A1']],[3,['A2','A2','A1']], [1,['A2']]]
df = pd.DataFrame(data)
dfcopy = df.copy()
0 1
0 1 ['A1']
1 3 ['A2', 'A2', 'A1']
2 1 ['A2']
df 的 id 是 1874789864000,dfcopy 的 id 是 1874789865736。与预期不同。现在我想在 dfcopy[1,1] 位置删除一个“A2”,并将 dfcopy[1,0] 减少一个(第 0 列是第 1 列中列表的长度)
dfcopy.at[1,0]=dfcopy.at[1,0]-1
df =
0 1
0 1 ['A1']
1 3 ['A2', 'A2', 'A1']
2 1 ['A2']
dfcopy =
0 1
0 1 ['A1']
1 2 ['A2', 'A2', 'A1']
2 1 ['A2']
正如我所料,第 0 列中的数量仅在 dfcopy 中减少。现在我删除元素 dfcopy[1,1] 的“A2”
dfcopy.at[1,1].remove('A2')
df =
0 1
0 1 ['A1']
1 3 [ 'A2', 'A1']
2 1 ['A2']
dfcopy =
0 1
0 1 ['A1']
1 2 [ 'A2', 'A1']
2 1 ['A2']
id 仍然与以前相同(未显示),但现在我的 df 在位置 df[1,1] 发生了更改,
为什么在我定义副本时会发生这种情况,我该如何解决这个问题?
intended output:
df =
0 1
0 1 ['A1']
1 3 [ 'A2', 'A2', 'A1']
2 1 ['A2']
dfcopy =
0 1
0 1 ['A1']
1 2 [ 'A2', 'A1']
2 1 ['A2']
我在纪录片和 Stackoverflow 上看了很多,但不明白为什么会发生这种情况。
解决方法
data = [[1,['A1']],[3,['A2','A2','A1']], [1,['A2']]]
df = pd.DataFrame(data)
dfcopy = df.copy()
dfcopy.at[1,0]=dfcopy.at[1,0]-1
list = list(dfcopy.at[1,1])
list.remove('A2')
dfcopy.at[1,1] = list
df =
0 1
0 1 ['A1']
1 3 [ 'A2', 'A2', 'A1']
2 1 ['A2']
dfcopy =
0 1
0 1 ['A1']
1 2 [ 'A2', 'A1']
2 1 ['A2']
解决方案
import copy
df=copy.deepcopy(df)
可能对你有用!
正如评论中提到的,
。复制()
有默认属性
深=真
,但它并不像你想要的那样深
推荐阅读
- android - 如何收听安卓Exo-player的进度变化
- html - 图片在文字之后,但在文字上方的移动视图中
- overriding - 在 webots 中,一个命令会覆盖另一个命令
- r - GGplot 在 R 中分组后显示的平均数据不正确
- python - TypeError: SparseDataFrame() 在使用 Light_FAMD 的主成分分析中不接受任何参数
- sum - 偶数斐波那契数总和
- ajax - 如何使用 laravel 数据表下载文件
- ms-access - MS Access 图表创建空白列
- c# - JsonConvert.DeserializeObject 返回空值
- python - xarray - 合并具有重叠或缺失时间坐标的多个 DataArray 对象