鉴于:
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
赋值的有效方法(解决方法)是什么?
具有更多上下文的错误回溯是:
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
可能会改变“稀疏性”、零(“填充”)和非零值的混合,从而改变底层索引。