gpt4 book ai didi

python - 对具有稀疏列的 pandas.DataFrame 中的行进行基于索引的访问

转载 作者:行者123 更新时间:2023-12-04 04:00:06 24 4
gpt4 key购买 nike

由于内存限制,我必须在 pandas.DataFrame(pandas 版本 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

输出:

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

如果使用 .loc:

df.loc[[0,1]]

输出:

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

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

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

输出:

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

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

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

最佳答案

所以这确实是 pandas 中的一个错误,已在 1.1.0 版中修复(请参阅 GitHub 了解问题描述和 changelog for 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]]

输出:

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

关于python - 对具有稀疏列的 pandas.DataFrame 中的行进行基于索引的访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63196925/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com