TypeError:SparseArray 不支持通过 setitem 进行项目分配

问题描述 投票:0回答:1

鉴于:

import pandas as pd
print(pd.__version__) # '2.1.0'
df=pd.DataFrame([[1., 0., 1.5], [0., 2., 0.]], dtype=pd.SparseDtype("float32"))

我想在我的切片 pandas 稀疏数据框中分配自定义值,所以我执行以下操作:

df_sliced=df.iloc[0].copy() # OK
df_sliced.iloc[:]=0 # ERROR

我收到以下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/CSC_CONTAINER/miniconda/envs/env1/lib/python3.9/site-packages/pandas/core/indexing.py", line 885, in __setitem__
    iloc._setitem_with_indexer(indexer, value, self.name)
  File "/CSC_CONTAINER/miniconda/envs/env1/lib/python3.9/site-packages/pandas/core/indexing.py", line 1895, in _setitem_with_indexer
    self._setitem_single_block(indexer, value, name)
  File "/CSC_CONTAINER/miniconda/envs/env1/lib/python3.9/site-packages/pandas/core/indexing.py", line 2138, in _setitem_single_block
    self.obj._mgr = self.obj._mgr.setitem(indexer=indexer, value=value)
  File "/CSC_CONTAINER/miniconda/envs/env1/lib/python3.9/site-packages/pandas/core/internals/managers.py", line 399, in setitem
    return self.apply("setitem", indexer=indexer, value=value)
  File "/CSC_CONTAINER/miniconda/envs/env1/lib/python3.9/site-packages/pandas/core/internals/managers.py", line 354, in apply
    applied = getattr(b, f)(**kwargs)
  File "/CSC_CONTAINER/miniconda/envs/env1/lib/python3.9/site-packages/pandas/core/internals/blocks.py", line 1758, in setitem
    values[indexer] = value
  File "/CSC_CONTAINER/miniconda/envs/env1/lib/python3.9/site-packages/pandas/core/arrays/sparse/array.py", line 583, in __setitem__
    raise TypeError(msg)
TypeError: SparseArray does not support item assignment via setitem

在 Pandas 中为

SparseDtype
赋值的有效方法(解决方法)是什么?

python pandas sparse-matrix
1个回答
0
投票

具有更多上下文的错误回溯是:

SparseArray.__setitem__(self, key, value)
    581 def __setitem__(self, key, value):
    582     # I suppose we could allow setting of non-fill_value elements.
    583     # TODO(SparseArray.__setitem__): remove special cases in
    584     # ExtensionBlock.where
    585     msg = "SparseArray does not support item assignment via setitem"
--> 586     raise TypeError(msg)

这告诉我

SparseArray
仍在开发中,目前设置值不起作用。我知道,通过使用
scipy.sparse
,设置稀疏值需要更多工作,特别是如果
fill
值可能更改为非填充。

scipy.sparse.coo_matrix
格式根本不实现索引 - 获取或设置。用于大多数计算的
csr_matrix
确实实现了索引,但使用
set
给出了效率警告。
set
可能会改变“稀疏性”、零(“填充”)和非零值的混合,从而改变底层索引。

© www.soinside.com 2019 - 2024. All rights reserved.