【发布时间】:2019-07-10 00:06:15
【问题描述】:
我一直在使用 python 并理解通过 .copy 函数复制数据帧的概念,而不是仅仅将其重新分配给变量。
假设我们有以下数据框: dfx:
Name Score1 Score2 Score3 Score4
0 Jack 10 Perfect 10 Perfect
1 Jill 10 10 10 Not Finished
2 Jane 20 10 10 5
3 Tom Not Finished 15 10 5
dfx2 = dfx.drop("Score1",axis = 1)
dfx2:
Name Score2 Score3 Score4
0 Jack Perfect 10 Perfect
1 Jill 10 10 Not Finished
2 Jane 10 10 5
3 Tom 15 10 5
再次运行 dfx 仍会返回原始数据帧
Name Score1 Score2 Score3 Score4
0 Jack 10 Perfect 10 Perfect
1 Jill 10 10 10 Not Finished
2 Jane 20 10 10 5
3 Tom Not Finished 15 10 5
不应该重新分配导致列“Score1”也从原始数据集中删除吗?
但是,运行以下命令:
dfx3 = dfx
dfx3
Name Score1 Score2 Score3 Score4
0 Jack 10 Perfect 10 Perfect
1 Jill 10 10 10 Not Finished
2 Jane 20 10 10 5
3 Tom Not Finished 15 10 5
dfx3.loc[0,"Score4"] = "BAD"
dfx3
Name Score1 Score2 Score3 Score4
0 Jack 10 Perfect 10 BAD
1 Jill 10 10 10 Not Finished
2 Jane 20 10 10 5
3 Tom Not Finished 15 10 5
dfx
Name Score1 Score2 Score3 Score4
0 Jack 10 Perfect 10 BAD
1 Jill 10 10 10 Not Finished
2 Jane 20 10 10 5
3 Tom Not Finished 15 10 5
确实会导致原始数据集被修改。
任何解释为什么列删除不会修改原始数据集但元素更改会改变原始数据集?并且似乎对分配数据集中列名的任何更改也会修改原始数据集。
【问题讨论】:
-
.drop()显式返回一个副本,除非您设置了inplace=True。另一件事是关于对象引用如何工作的 python 问题,而不是 pandas 问题。 -
dfx3 = dfx.copy()会解决这个问题。检查this
标签: python python-3.x pandas dataframe