在熊猫
库中,很多时候都有一个更改对象的选项,例如使用以下语句...
df.dropna(axis='index', how='all', inplace=True)
我很好奇在传递inplace=True
与inplace=False
时返回什么以及如何处理对象。
当inplace=True
时,是否所有操作都在修改self
?当inplace=False
立即创建一个新对象,比如new_df=self
,然后返回new_df
?
我使用它的方式是
# 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
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。干得好,开发人员!
当传递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月)结束的年份 这到底是什么意思? 从我的常识来看,包括八月、九月和十月。那么在这里如何处理十二月()呢? 任何人都可以简明扼要地解释变量吗?提前感谢您。:)