pandas中的稀疏列:直接访问非空值的索引

Sparse columns in pandas: directly access the indices of non-null values

我有一个带有一些稀疏列的大型数据框(大约 10^8 行)。我希望能够 快速 访问给定列中的非空值,即实际保存在数组中的值。我认为这可以通过 df.<column name>[<indices of non-null values>] 来实现。但是,我看不到如何直接访问 <indices of non-null values>,即不进行任何计算。当我尝试 df.<column name>.index 时,它告诉我它是 RangeIndex,这没有帮助。当我 运行 df.<column name>.values 时,我什至可以 看到 <indices of non-null values>,但是通过 dir(df.<column name>.values) 我仍然看不到访问的方法他们。

为了阐明我的意思,这里有一个玩具示例:

在这个例子中 <indices of non-null values>[0,1,3]

编辑:@Piotr Żak 下面的答案是一个可行的解决方案,但它需要计算。有没有办法通过列或数组的属性直接访问 <indices of non-null values>

import pandas as pd
import numpy as np

df = pd.DataFrame(np.array([[1], [np.nan], [4], [np.nan], [9]]),
                   columns=['a'])

只过滤没有 nan:

filtered_df = df[df['a'].notnull()]

将列从 df 转换为数组:

s_array = filtered_df[["a"]].to_numpy()

或 - 将索引从 df 转换为数组:

filtered_df.index.tolist()