带有 inplace=True 的 Pandas fillna 更改了所有等于它应该操作的数据帧 [重复]

Posted

技术标签:

【中文标题】带有 inplace=True 的 Pandas fillna 更改了所有等于它应该操作的数据帧 [重复]【英文标题】:Pandas fillna with inplace=True changes all dataframes that are equal to the one that it is supposed to operate on [duplicate] 【发布时间】:2018-10-06 13:01:48 【问题描述】:
import numpy as np
import pandas as pd

df = pd.DataFrame([[np.nan, 2, 1, 0],
                [3, 4, np.nan, 1],
                [np.nan, np.nan, 8, 5],
                [np.nan, 3, np.nan, 4]],
                columns=list('ABCD'))
df2 = df
df.fillna(value = df.mean(), inplace=True)

现在 df2 和 df 是相同的。 如何避免更改 df2?

【问题讨论】:

Python 中的赋值语句不会复制对象,它们会在目标和对象之间创建绑定。检查这个。 ***.com/questions/21537078/… 【参考方案1】:

感谢您的回复。总而言之,inplace=True 将修改对象上的任何其他视图。 在我的示例中,为避免修改 df2,我应该使用 df2 = df.copy() 代替 df2 = df

【讨论】:

【参考方案2】:

您正在“指向”df2 指向 df 指向的对象。因此,它们将是相同的。

(以下来自Python docs)。

Python 中的赋值语句不会复制对象,它们会在目标和对象之间创建绑定。对于可变集合或包含可变项的集合,有时需要一个副本,以便可以更改一个副本而不更改另一个副本。

要复制数据框,请执行以下操作:df2 = df.copy();

【讨论】:

【参考方案3】:

考虑使用copy 方法复制df:https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.copy.html

【讨论】:

以上是关于带有 inplace=True 的 Pandas fillna 更改了所有等于它应该操作的数据帧 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Pandas DataFrame 替换不适用于 inplace=True

pandas .set_index(“TIMESTAMP“, inplace=True) 用法

pandas .set_index(“TIMESTAMP“, inplace=True) 用法

pandas .set_index(“TIMESTAMP“, inplace=True) 用法

Pandas DataFrame:set_index with inplace=True 返回 NoneType,为啥?

Pandas常用的数据清洗方法