【发布时间】:2019-08-08 12:18:18
【问题描述】:
我正在尝试将 Pandas 的 DataFrame 子类化到另一个类中,就像 GeoPandas here 中的 GeoDataFrame 一样。
但是,我得到了一个
最大递归深度超出错误
当我跑步时:
from pandas import DataFrame
df = pd.DataFrame({'A':[1,2,4], 'B':[4,5,6]})
class NewDataFrame(DataFrame):
def __init__(self, dataframe: pd.DataFrame) -> None:
self.dataframe = dataframe
super(NewDataFrame, self).__init__(dataframe)
def do_something(self):
print(self.dataframe.columns)
ndf = NewDataFrame(df)
完全错误
Traceback (most recent call last):
File "/Users/as/Documents/projects/model/.venv/lib/python3.7/site-packages/IPython/core/interactiveshell.py", line 3326, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-40-03d15755b527>", line 9, in <module>
ndf = NewDataFrame(df)
File "<ipython-input-40-03d15755b527>", line 3, in __init__
self.dataframe = dataframe
File "/Users/as/Documents/projects/model/.venv/lib/python3.7/site-packages/pandas/core/generic.py", line 5092, in __setattr__
existing = getattr(self, name)
File "/Users/as/Documents/projects/model/.venv/lib/python3.7/site-packages/pandas/core/generic.py", line 5065, in __getattr__
if self._info_axis._can_hold_identifiers_and_holds_name(name):
File "/Users/as/Documents/projects/model/.venv/lib/python3.7/site-packages/pandas/core/generic.py", line 5065, in __getattr__
if self._info_axis._can_hold_identifiers_and_holds_name(name):
File "/Users/as/Documents/projects/model/.venv/lib/python3.7/site-packages/pandas/core/generic.py", line 5065, in __getattr__
if self._info_axis._can_hold_identifiers_and_holds_name(name):
[Previous line repeated 1484 more times]
File "/Users/as/Documents/projects/model/.venv/lib/python3.7/site-packages/pandas/core/generic.py", line 428, in _info_axis
return getattr(self, self._info_axis_name)
File "/Users/as/Documents/projects/model/.venv/lib/python3.7/site-packages/pandas/core/generic.py", line 5063, in __getattr__
return object.__getattribute__(self, name)
File "pandas/_libs/properties.pyx", line 65, in pandas._libs.properties.AxisProperty.__get__
File "/Users/as/Documents/projects/model/.venv/lib/python3.7/site-packages/pandas/core/generic.py", line 5063, in __getattr__
return object.__getattribute__(self, name)
RecursionError: maximum recursion depth exceeded while calling a Python object
我知道this question 和this,但是除非我遗漏了什么,否则这两个问题的答案似乎都是我所做的。
我使用的是 Mac OS 10.14.5 和 Python 3.7.3
【问题讨论】:
-
在您提供的示例中,初始化参数不是您想要做的数据框实例,只是一个用于定义列的字符串。
-
为什么要调用 pd.Dataframe 构造函数两次?为什么不直接用你的字典调用 pd.Dataframe 呢?
d = {'A':[1,2,4], 'B':[4,5,6]}class NewDataFrame(DataFrame): def __init__(self, dict: myDict) -> None: super(NewDataFrame,self).__init__(myDict) -
@ipaleka 是一个字符串吗?我认为这是一个数据框
-
@ma3oun
df只是一个例子,它不是我试图调用类的实际数据框。 -
@salhin 实际上我错了,即使 没有 那些参数也会调用 super,所以只有 *args, **kwargs 被提供给DataFrame initialization。这意味着字典应该作为第一个位置参数或
data命名参数。
标签: python pandas oop superclass