对于某些熊猫函数,例如sum(),cumsum()和cumprod(),skipna有一个选项,默认情况下设置为True。这会给我带来问题,因为错误可能会悄然传播,因此我总是将skipna显式设置为False。
sum_df = df.sum(skipna=False)
每次出现这些功能之一时执行此操作,会使代码看起来有些笨拙。有什么方法可以更改Pandas中的默认行为?
答案 0 :(得分:1)
似乎没有什么option可以控制这种行为。它是硬编码的:
import inspect
inspect.getfile(pd.DataFrame.sum) # './pandas/core/generic.py'
inspect.getsource(pd.DataFrame.sum)
# @Substitution(outname=name, desc=desc, name1=name1, name2=name2,
# axis_descr=axis_descr, min_count=_min_count_stub,
# see_also=see_also, examples=examples)
# @Appender(_num_doc)
# def stat_func(self, axis=None, skipna=None, level=None, numeric_only=None,
# [...]
对于请求请求可能是个好主意。
可能不是最好的解决方案,虽然有点破烂,但确实可以解决您的问题。
我并不是说这通常是一种好习惯。它可能有我尚未解决的缺点(欢迎您在评论中列出)。无论如何,此解决方案的优点是非侵入性。
另外,尽管这是一种非常简单的技术,并且它是纯PSL,但它可能会违反“最小惊讶原则”(有关详细信息,请参阅此answer)。
让我们构建一个覆盖现有默认参数或添加额外参数的包装器:
def set_default(func, **default):
def inner(*args, **kwargs):
kwargs.update(default) # Update function kwargs w/ decorator defaults
return func(*args, **kwargs) # Call function w/ updated kwargs
return inner # Return decorated function
然后,我们可以装饰任何功能。例如:
import pandas as pd
pd.DataFrame.sum = set_default(pd.DataFrame.sum, skipna=False)
然后,sum
对象的DataFrame
方法每次将其调用的skipna
覆盖为False
。现在下面的代码:
import numpy as np
df = pd.DataFrame([1., 2., np.nan])
df.sum()
返回:
0 NaN
dtype: float64
代替:
0 3.0
dtype: float64
我们可以一次将此修改应用于许多功能:
for key in ['sum', 'mean', 'std']:
setattr(pd.DataFrame, key, set_default(getattr(pd.DataFrame, key), skipna=False))
如果我们将这些修改存储到python模块(.py
文件中),它们将在导入时应用,而无需修改Pandas代码本身。
答案 1 :(得分:0)
这也许不是最好的方法,但是我认为您应该修改熊猫文件。
1。找到熊猫的文件。
如果您使用pip安装了pandas,它应该位于python安装文件夹中的Lib文件中。如果您不知道python的安装位置,请在Google上查找。
如果您未使用pip进行安装,请在Google上查找随您的软件(anaconda或其他)安装的软件包的位置
2。找到DataFrame类和方法。
最好的方法是执行CTRL + F或其他字母来查找方法
3。更改默认值。
找到方法后,将skipna=True
更改为skipna=False
。
完成此操作后,保存文件即可使用!
希望我能对您有所帮助:)