【问题标题】:sub DataFrame remain linked with the original one子 DataFrame 保持与原始数据帧的链接
【发布时间】:2021-05-05 09:01:34
【问题描述】:

我有一个 DataFrame 列表。我在pp 中提取了这个DataFrame 之一,并修改了pp 的一列。当我注意到原来的 DataFrame 也被修改时,我仍然感到震惊。

我有质量问题,因为我不知道有多少脚本受到影响。有对此的解释吗?我做错了什么?

df1 = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]),columns=['a', 'b', 'c'])


df3=df2=df1

predictions=[df1,df2,df3]

predictions
Out[96]: 
[   a  b  c
 0  1  2  3
 1  4  5  6
 2  7  8  9,
    a  b  c
 0  1  2  3
 1  4  5  6
 2  7  8  9,
    a  b  c
 0  1  2  3
 1  4  5  6
 2  7  8  9]

pp=predictions[0]

pp['a']= np.random.uniform(low=2, high=3, size=(len(pp['a']),))

predictions
Out[99]: 
[          a  b  c
 0  2.309992  2  3
 1  2.585460  5  6
 2  2.845087  8  9,
           a  b  c
 0  2.309992  2  3
 1  2.585460  5  6
 2  2.845087  8  9,
           a  b  c
 0  2.309992  2  3
 1  2.585460  5  6
 2  2.845087  8  9]

【问题讨论】:

  • 使用 predictions[0].copy() 以便您获得原始数据帧的副本。请参阅 aoout 副本here
  • predictions 没有新的内存空间,它只是一个参考。您需要创建一个副本!
  • 当我们使用 df1=df2 创建数据框时,在 df1 中完成的所有数据操作也将在 df1 中实现。尝试使用 df1=df2.copy() 创建 Dfs 现在,当我们在 DF1 中进行更改时,DF2 将保持不变。

标签: pandas list dataframe extract


【解决方案1】:

你需要复制,而不是引用所以使用DataFrame.copy

df1 = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]),columns=['a', 'b', 'c'])

df2 = df1.copy()
df3 = df1.copy()

predictions=[df1,df2,df3]

pp=predictions[0]
pp['a']= np.random.uniform(low=2, high=3, size=(len(pp['a']),))

print (predictions)
[          a  b  c
0  2.736182  2  3
1  2.996083  5  6
2  2.469578  8  9,    a  b  c
0  1  2  3
1  4  5  6
2  7  8  9,    a  b  c
0  1  2  3
1  4  5  6
2  7  8  9]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-17
    • 1970-01-01
    • 1970-01-01
    • 2023-02-13
    • 2018-02-04
    • 2019-08-17
    • 2014-01-18
    • 2018-09-10
    相关资源
    最近更新 更多