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_counts
和 pd.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
设为 None
,base
中的 value_counts
对象仍然包含旧的 value_counts
函数。所以,那是行不通的!
显然,如果您直接 pd.core.base.value_counts
None
- 就可以了。
这确实与我的解决方案相同,因为 pd.core.base.IndexOpsMixin.value_counts
只是 returns pd.core.base.value_counts
。
我想更改 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_counts
和 pd.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
设为 None
,base
中的 value_counts
对象仍然包含旧的 value_counts
函数。所以,那是行不通的!
显然,如果您直接 pd.core.base.value_counts
None
- 就可以了。
这确实与我的解决方案相同,因为 pd.core.base.IndexOpsMixin.value_counts
只是 returns pd.core.base.value_counts
。