Monkey 补丁 pandas:在导入时修改 value_counts 函数

Monkey patch pandas: modify value_counts function at import

我想更改 pandas 中的 value_counts 功能,我试图找出它不起作用的原因。

如果我这样做

>>> import pandas as pd
>>> pd.core.algorithms.value_counts = None

>>> pd.Series([1,2,3]).value_counts()

3    1
2    1
1    1
dtype: int64

我希望有一个 TypeError

但是如果我这样做

>>> import pandas as pd
>>> pd.core.base.value_counts = None #or a modified function

>>> pd.Series([1,2,3]).value_counts()

TypeError: 'NoneType' object is not callable

我得到 TypeError .

造成这种行为差异的原因是什么? 我如何修改 pd.core.algorithms.value_counts 函数,使其改变所有使用它来构造 value_counts 方法的 类 的行为?

你可以尝试使用 pd.core.base.IndexOpsMixin.value_counts = None 吗?

这使得 pd.Series.value_countspd.Index.value_counts 都成为 None。您还在看什么?

解释:

pd.core.base 中有一个导入 from pandas.core.algorithms import duplicated, unique1d, value_counts

所以,pd.core.base.value_counts = pd.core.algorithms.value_counts

现在,即使您将 pd.core.algorithms.value_counts 设为 Nonebase 中的 value_counts 对象仍然包含旧的 value_counts 函数。所以,那是行不通的!

显然,如果您直接 pd.core.base.value_counts None - 就可以了。

这确实与我的解决方案相同,因为 pd.core.base.IndexOpsMixin.value_counts 只是 returns pd.core.base.value_counts