当前位置: 首页 > 知识库问答 >
问题:

在熊猫中理解inplace=True

田文景
2023-03-14

熊猫库中,很多时候都有一个更改对象的选项,例如使用以下语句...

df.dropna(axis='index', how='all', inplace=True)

我很好奇在传递inplace=Trueinplace=False时返回什么以及如何处理对象。

inplace=True时,是否所有操作都在修改self?当inplace=False立即创建一个新对象,比如new_df=self,然后返回new_df

共有3个答案

蒙胤
2023-03-14

我使用它的方式是

# Have to assign back to dataframe (because it is a new copy)
df = df.some_operation(inplace=False) 

# No need to assign back to dataframe (because it is on the same copy)
df.some_operation(inplace=True)

结论:

 if inplace is False
      Assign to a new variable;
 else
      No need to assign
强承望
2023-03-14
  • inplace,与名称的含义相反,通常不会阻止创建副本,并且(几乎)从不提供任何性能优势
  • inplace不适用于方法链接
  • inplace如果在DataFrame列上使用,可能会导致SettinSusCopyWarning,并且可能会阻止操作进行,从而导致代码中难以调试的错误

上面的痛点是初学者的常见陷阱,因此删除此选项将简化API。

我不建议设置此参数,因为它用处不大。请参阅这个GitHub问题,它提议在api范围内弃用inplace参数。

一种常见的误解是,使用inplace=True将导致更高效或优化的代码。实际上,使用inplace=True绝对没有性能优势。就地版本和异地版本都会创建数据的副本,就地版本会自动将副本分配回。

inplace=True是初学者的一个常见陷阱。例如,它可以触发SettinSusCopyWarning

df = pd.DataFrame({'a': [3, 2, 1], 'b': ['x', 'y', 'z']})

df2 = df[df['a'] > 1]
df2['b'].replace({'x': 'abc'}, inplace=True)
# SettingWithCopyWarning: 
# A value is trying to be set on a copy of a slice from a DataFrame

使用inplace=True调用DataFrame列上的函数可能有效,也可能无效。当涉及链式索引时尤其如此。

似乎上述问题还不够,inplace=True也会阻碍方法链接。对比

result = df.some_function1().reset_index().some_function2()

而不是

temp = df.some_function1()
temp.reset_index(inplace=True)
result = temp.some_function2()

前者有助于更好的代码组织和可读性。

另一个支持性声明是,set_axis的API最近发生了更改,使得inplace默认值从True切换到False。见GH27600。干得好,开发人员!

姜兴业
2023-03-14

当传递inplace=True时,数据将被就地重命名(不返回任何内容),因此您可以使用:

df.an_operation(inplace=True)

当传递inplace=False时(这是默认值,因此没有必要),执行操作并返回对象的副本,因此您可以使用:

df = df.an_operation(inplace=False) 
 类似资料:
  • 在库中,有一个选项可以多次更改对象的位置,如下面的语句······ 我很好奇当传递和时,将返回什么以及如何处理对象。 当时,是否所有操作都在修改?当是立即创建的新对象时,例如,然后返回?

  • 我正在从pandas输出一个csv文件,其中包含一些用于latex报告的调查文本。一些响应在其响应中带有逗号,因此熊猫将数据输出为 通过将字段用双引号括起来,显然可以处理字段中的逗号。 我希望上面看起来像这样: 通过将所述字段包装在{}中,因为这是latex包可以理解的分隔符。 有没有办法告诉熊猫。要做这个吗? 我已经尝试了以下方法 当然,当我需要“}”时,它会用“{”关闭文本包装 更新当我使用p

  • 问题内容: 在pandas库中多次出现改变就地等物体的方式与下面的语句一个选项… 我很好奇返回的内容以及何时传递对象与何时传递对象。 所有操作self何时都在修改?何时立即创建一个新对象,例如然后返回? 问题答案: 如果通过,该数据被重命名到位(它没有返回值),所以你会使用: 当传递(这是默认值,所以没有必要),执行操作,并返回该对象的副本,所以你会使用:

  • 我想知道是否有一种简洁的方法可以在存在相同行的情况下“折叠”熊猫数据帧。例如: df= 我需要的是: 它肯定应该包括 但如何有效地实现括号中的位,我感到困惑。

  • 问题内容: 如问题所述,我有一个很大的数据框,但看起来像: 我试图摆脱文本数据,并将其替换为预定义的数值等效项。例如,在这种情况下,我想分别用或替换的或值。有没有一种方法无需我手动输入和更改值? 问题答案: / 上面的一个有趣的通用版本: 一切都不是。

  • 我有一个熊猫时期对象: 从书(Python for Data Analysis)中,的意思是 季度日期固定在每个月的最后一个日历日,在指定月份(1月、2月、3月、4月、5月、6月、7月、8月、9月、10月、11月或12月)结束的年份 这到底是什么意思? 从我的常识来看,包括八月、九月和十月。那么在这里如何处理十二月()呢? 任何人都可以简明扼要地解释变量吗?提前感谢您。:)