【问题标题】:Modifying one dataframe appears to change another [duplicate]修改一个数据框似乎会改变另一个[重复]
【发布时间】:2021-10-26 21:57:17
【问题描述】:

我是 Python 循环的新手,刚刚遇到一个奇怪的问题。我正在对多个数据帧进行一些计算,为了简化问题,这里有一个插图。

假设我有 3 个填充有 NaN 的数据框:

# generate NaN entries
data = np.empty((15, 10)) 
# create dataframe
data[:] = np.nan
dfnan = pd.DataFrame(data)
df1 = dfnan
df2 = dfnan
df3 = dfnan

在这一步之后,所有三个数据框都按预期给了我NaN

但是,如果我在一个块中添加两个 for 循环,如下所示:

for i in range(0, 15, 1):
    df1.iloc[i] = 0

for j in range(0, 15, 1):
    df2.iloc[j] = df1.iloc[j].transform(lambda x: x+1)

然后所有df1df2df3 给我1 条目。但不应该是这样吗:

df1 填充 0df2 填充 1df3 填充 NaN(因为我没有对其进行任何更改)?

为什么会这样以及如何更改它以获得想要的结果?

【问题讨论】:

  • 尝试在第一个 for 循环之后打印所有 3 个变量?输出是什么?
  • @Code-Apprentice 是的,问题已解决。非常感谢!

标签: python pandas dataframe for-loop


【解决方案1】:

分配永远不会在 python 中复制。 df1df2df3dfnan 都是对同一对象 (pd.DataFrame(data)) 的引用。这意味着其中一个的变化会反映在其余的中,因为它们都指向同一个对象。

这是一个很棒的阅读https://nedbatchelder.com/text/names.html

要创建独立副本,请使用copy 方法

dfnan = pd.DataFrame(data)
df1 = dfnan.copy()
df2 = dfnan.copy()
df3 = dfnan.copy()

【讨论】:

  • 是的,我现在明白了。谢谢!
猜你喜欢
  • 2021-08-10
  • 1970-01-01
  • 2017-11-20
  • 2022-12-18
  • 2011-05-12
  • 2010-11-26
  • 1970-01-01
  • 2021-09-03
  • 2021-01-20
相关资源
最近更新 更多