从稀疏矩阵导入时出现 Modin AttributeError
Modin AttributeError when importing from sparse matrix
我正在尝试使用 Modin 包导入使用 scipy(具体来说,scipy.sparse.csr_matrix)创建的稀疏矩阵。
调用方法:
from modin import pandas as pd
pd.DataFrame.sparse.from_spmatrix(mat)
我收到以下 AttributeError:
AttributeError Traceback (most recent call last)
C:\Users\BERGAM~1\AppData\Local\Temp/ipykernel_37436/3032405809.py in <module>
----> 1 pd.DataFrame.sparse.from_spmatrix(mat)
C:\Miniconda3\envs\persolite_v0\lib\site-packages\modin\pandas\accessor.py in from_spmatrix(cls, data, index, columns)
109 @classmethod
110 def from_spmatrix(cls, data, index=None, columns=None):
--> 111 return cls._default_to_pandas(
112 pandas.DataFrame.sparse.from_spmatrix, data, index=index, columns=columns
113 )
C:\Miniconda3\envs\persolite_v0\lib\site-packages\modin\pandas\accessor.py in _default_to_pandas(self, op, *args, **kwargs)
78 Result of operation.
79 """
---> 80 return self._parent._default_to_pandas(
81 lambda parent: op(parent.sparse, *args, **kwargs)
82 )
AttributeError: 'function' object has no attribute '_parent'
在使用原始 pandas API 时,它有效。
有遇到类似问题的人吗?
感谢支持
这是一个错误。此包中的代码使用 class 方法调用实例方法,因此 self
引用未绑定到推理,而是对第一个参数的引用(此处为一个函数)。
这是失败的代码:
class BaseSparseAccessor:
def _default_to_pandas(self, op, *args, **kwargs):
return self._parent._default_to_pandas(
lambda parent: op(parent.sparse, *args, **kwargs)
)
class SparseFrameAccessor(BaseSparseAccessor):
@classmethod
def from_spmatrix(cls, data, index=None, columns=None):
return cls._default_to_pandas(
pandas.DataFrame.sparse.from_spmatrix, data, index=index, columns=columns
)
为什么失败的简单示例如下:
class A:
_parent = 0
def a_method(self, op, **args):
self._parent = op(self._parent, **args)
class B(A):
@classmethod
def b_method(cls, data, **args):
return cls.a_method(sum, data, **args)
当你调用b_method
时(B是否被实例化成一个实例并不重要)它会失败,因为a_method
中的self
是函数sum
而不是 class 或实例引用。
>>> B.b_method(20)
AttributeError Traceback (most recent call last)
<ipython-input-17-3914ce57d001> in <module>
----> 1 B.b_method(20)
<ipython-input-11-a25ce2c0614c> in b_method(cls, data, **args)
12 @classmethod
13 def b_method(cls, data, **args):
---> 14 return cls.a_method(sum, data, **args)
<ipython-input-11-a25ce2c0614c> in a_method(self, op, **args)
6
7 def a_method(self, op, **args):
----> 8 self._parent = op(self._parent, **args)
9
10 class B(A):
AttributeError: 'builtin_function_or_method' object has no attribute '_parent'
我正在尝试使用 Modin 包导入使用 scipy(具体来说,scipy.sparse.csr_matrix)创建的稀疏矩阵。
调用方法:
from modin import pandas as pd
pd.DataFrame.sparse.from_spmatrix(mat)
我收到以下 AttributeError:
AttributeError Traceback (most recent call last)
C:\Users\BERGAM~1\AppData\Local\Temp/ipykernel_37436/3032405809.py in <module>
----> 1 pd.DataFrame.sparse.from_spmatrix(mat)
C:\Miniconda3\envs\persolite_v0\lib\site-packages\modin\pandas\accessor.py in from_spmatrix(cls, data, index, columns)
109 @classmethod
110 def from_spmatrix(cls, data, index=None, columns=None):
--> 111 return cls._default_to_pandas(
112 pandas.DataFrame.sparse.from_spmatrix, data, index=index, columns=columns
113 )
C:\Miniconda3\envs\persolite_v0\lib\site-packages\modin\pandas\accessor.py in _default_to_pandas(self, op, *args, **kwargs)
78 Result of operation.
79 """
---> 80 return self._parent._default_to_pandas(
81 lambda parent: op(parent.sparse, *args, **kwargs)
82 )
AttributeError: 'function' object has no attribute '_parent'
在使用原始 pandas API 时,它有效。
有遇到类似问题的人吗? 感谢支持
这是一个错误。此包中的代码使用 class 方法调用实例方法,因此 self
引用未绑定到推理,而是对第一个参数的引用(此处为一个函数)。
这是失败的代码:
class BaseSparseAccessor:
def _default_to_pandas(self, op, *args, **kwargs):
return self._parent._default_to_pandas(
lambda parent: op(parent.sparse, *args, **kwargs)
)
class SparseFrameAccessor(BaseSparseAccessor):
@classmethod
def from_spmatrix(cls, data, index=None, columns=None):
return cls._default_to_pandas(
pandas.DataFrame.sparse.from_spmatrix, data, index=index, columns=columns
)
为什么失败的简单示例如下:
class A:
_parent = 0
def a_method(self, op, **args):
self._parent = op(self._parent, **args)
class B(A):
@classmethod
def b_method(cls, data, **args):
return cls.a_method(sum, data, **args)
当你调用b_method
时(B是否被实例化成一个实例并不重要)它会失败,因为a_method
中的self
是函数sum
而不是 class 或实例引用。
>>> B.b_method(20)
AttributeError Traceback (most recent call last)
<ipython-input-17-3914ce57d001> in <module>
----> 1 B.b_method(20)
<ipython-input-11-a25ce2c0614c> in b_method(cls, data, **args)
12 @classmethod
13 def b_method(cls, data, **args):
---> 14 return cls.a_method(sum, data, **args)
<ipython-input-11-a25ce2c0614c> in a_method(self, op, **args)
6
7 def a_method(self, op, **args):
----> 8 self._parent = op(self._parent, **args)
9
10 class B(A):
AttributeError: 'builtin_function_or_method' object has no attribute '_parent'