Pandas中未预料到的df更改在复制时的变化

2024-10-05 10:21:01 发布

您现在位置:Python中文网/ 问答频道 /正文

设df为数据的数据帧,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]位置的one'A2',并用one减少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']

Tags: 数据ida2dataframedfdataa1副本
1条回答
网友
1楼 · 发布于 2024-10-05 10:21:01
import copy
df=copy.deepcopy(df)

可能对你有用!你知道吗

正如评论中提到的

.copy()

具有默认属性

deep=True

,但它不是你想要的那么深

相关问题 更多 >

    热门问题