Опция не является опцией (пока)
Кажется, что нет такой опции для управления этим поведением. Это жестко закодировано:
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, она может нарушать Принцип Наименьшего Удивления (подробности см. В этом ответе ).
MCVE
Позволяет создать оболочку, которая переопределяет существующие параметры по умолчанию или добавляет дополнительные параметры:
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.