小编典典

在pandas数据框中检索NaN值的索引

python

我尝试为包含NaN值的每一行检索相应列的所有索引。

d=[[11.4,1.3,2.0, NaN],[11.4,1.3,NaN, NaN],[11.4,1.3,2.8, 0.7],[NaN,NaN,2.8, 0.7]]
df = pd.DataFrame(data=d, columns=['A','B','C','D'])
print df

      A    B    C    D
0  11.4  1.3  2.0  NaN
1  11.4  1.3  NaN  NaN
2  11.4  1.3  2.8  0.7
3  NaN   NaN  2.8  0.7

我已经做了以下工作:

  • 添加一列,每行的NaN计数
  • 获取包含NaN值的每一行的索引

我想要的(理想情况下是列的名称)是这样的列表:

[ ['D'],['C','D'],['A','B'] ]

希望我能找到一种方法,而不必为每一行做每一列的测试

if df.ix[i][column] == NaN:

我正在寻找一种pandas方法来处理庞大的数据集。

提前致谢。


阅读 223

收藏
2021-01-16

共1个答案

小编典典

另一种方法是提取NaN行:

In [11]: df_null = df.isnull().unstack()

In [12]: t = df_null[df_null]

In [13]: t
Out[13]:
A  3    True
B  3    True
C  1    True
D  0    True
   1    True
dtype: bool

这可以帮助您解决大部分问题,可能就足够了。
尽管使用该系列可能更容易:

In [14]: s = pd.Series(t2.index.get_level_values(1), t2.index.get_level_values(0))

In [15]: s
Out[15]:
0    D
1    C
1    D
3    A
3    B
dtype: object

例如,如果您想要列表(尽管我认为您不需要它们)

In [16]: s.groupby(level=0).apply(list)
Out[16]:
0       [D]
1    [C, D]
3    [A, B]
dtype: object
2021-01-16