【问题标题】:Copying dataframes through variables vs copying through variables for columns通过变量复制数据框与通过列变量复制
【发布时间】: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


【解决方案1】:

您将dfx3dfx 引用到一个DataFrame,如果您想在dfx3 上使用类似于dfx 的列进行操作,那么您应该在@987654326 上复制dfx @ 不将它们都引用到同一个 DataFrame。

dfx3 = dfx.copy()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-24
    • 1970-01-01
    • 2018-04-06
    • 1970-01-01
    • 2013-09-13
    • 2014-10-09
    • 2019-12-20
    相关资源
    最近更新 更多