繁体   English   中英

使用稀疏列对 pandas.DataFrame 中的行进行基于索引的访问

[英]Index-based access to rows in pandas.DataFrame with Sparse columns

由于 memory 的限制,我必须在pandas.DataFrame (熊猫版本 1.0.5)中使用稀疏列。 不幸的是,通过对行的基于索引的访问(使用.loc[] ),我遇到了以下问题:

df = pd.DataFrame.sparse.from_spmatrix(
    scipy.sparse.csr_matrix([[0, 0, 0, 1],
                             [1, 0, 0, 0],
                             [0, 1, 0, 0]])
)
df

Output:

    0   1   2   3
0   0   0   0   1
1   1   0   0   0
2   0   1   0   0

如果使用.loc

df.loc[[0,1]]

Output:

    0   1   2       3
0   0   0   NaN     1
1   1   0   NaN     0

理想情况下,我希望第二列也有0秒。 我对这里发生的事情的假设是内部 csc 矩阵表示以及我正在访问不包含任何非零值的列的行中的值的事实最初与填充值混淆。 dtypes有点反对这一点:

df.loc[[0,1]].dtypes

Output:

0         Sparse[int32, 0]
1         Sparse[int32, 0]
2       Sparse[float64, 0]
3         Sparse[int32, 0]

(请注意,即使第 2 列的视图的dtype已从Sparse[int32, 0]更改为Sparse[float64, 0] ,填充值仍为0 )。

谁能告诉我在行切片pd.DataFrame中出现的所有NaN是否确实指的是各自的零值,并且不会“隐藏”任何实际的非零条目? 是否有一种“安全”的方法可以在具有稀疏列的pd.DataFrame上使用基于索引的行访问?

所以这确实是pandas中的一个错误,已在版本 1.1.0 中修复(请参阅GitHub的问题描述和1.1.0的更改日志)。

在 1.1.0 中,最小示例有效:

df = pd.DataFrame.sparse.from_spmatrix(
    scipy.sparse.csr_matrix([[0, 0, 0, 1],
                             [1, 0, 0, 0],
                             [0, 1, 0, 0]])
)
df.loc[[0, 1]]

Output:

    0   1   2   3
0   0   0   0   1
1   1   0   0   0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM