【问题标题】:Pandas replace function wrongly changes in all dataframes [duplicate]熊猫替换所有数据帧中的功能错误更改[重复]
【发布时间】:2020-12-13 23:39:43
【问题描述】:

我使用 pandas 替换函数来替换一个值。请看下面的代码:

import pandas as pd

d = {'color' : pd.Series(['white', 'blue', 'orange']),
   'second_color': pd.Series(['white', 'black', 'blue']),
   'value' : pd.Series([1., 2., 3.])}
df1 = pd.DataFrame(d)
print(df1)

df = df1
df['color'] = df['color'].replace('white','red')

print(df1)

print(df)

我打算更改df中的值,但是为什么df1中的相同值也更改了?

下面的代码没问题。

df=df.replace('white','red')

【问题讨论】:

    标签: python pandas dataframe replace


    【解决方案1】:

    你需要使用.copy()

    df = df1.copy()
    

    因此您对df 所做的更改不会传播到df1

    【讨论】:

      【解决方案2】:

      因为两者都引用相同的数据位置。

      当您执行df = df1 时,它不会创建新的数据框,它只是将df 的引用设置为变量df1。使用id(),您可以看到两者都引用了相同的地址。

      >>> df = df1
      >>> id(df)
      41633008
      >>> id(df1)
      41633008
      

      要制作新副本,您可以使用DataFrame.copy 方法

      >>> df = df1.copy()
      >>> id(df)
      31533376
      >>> id(df1)
      41633008
      

      现在您可以看到两者都引用了不同的位置。

      关于浅拷贝和深拷贝还有很多需要学习的地方。请阅读文档了解更多信息。 - here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-29
        • 1970-01-01
        • 2019-02-23
        • 1970-01-01
        • 2022-01-17
        相关资源
        最近更新 更多