微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 查找df为null的索引

在pandas(master分支或即将推出的0.14)中,如何找到我的dataframe为null的索引?

当我做:

df.isnull()

我得到一个与df大小相同的布尔数据帧

如果我做:

df.isnull().index

我得到了原始df的索引.

我想要的是具有NaN条目的那些行的索引(在某些列或所有列上)

解决方法:

我会努力做到这一点:

In [11]: df = pd.DataFrame([[np.nan, 1], [0, np.nan], [1, 2]])

In [12]: df
Out[12]:
    0   1
0 NaN   1
1   0 NaN
2   1   2

In [13]: pd.isnull(df.values)
Out[13]:
array([[ True, False],
       [False,  True],
       [False, False]], dtype=bool)

In [14]: pd.isnull(df.values).any(1)
Out[14]: array([ True,  True, False], dtype=bool)

In [15]: np.nonzero(pd.isnull(df.values).any(1))
Out[15]: (array([0, 1]),)

In [16]: df.index[np.nonzero(pd.isnull(df.values).any(1))]
Out[16]: Int64Index([0, 1], dtype='int64')

要查看一些时间,略大于df:

In [21]: df = pd.DataFrame([[np.nan, 1], [0, np.nan], [1, 2]] * 1000)

In [22]: %timeit np.nonzero(pd.isnull(df.values).any(1))
10000 loops, best of 3: 85.8 µs per loop

In [23]: %timeit df.index[df.isnull().any(1)]
1000 loops, best of 3: 629 µs per loop

如果你关心指数(而不是位置):

In [24]: %timeit df.index[np.nonzero(pd.isnull(df.values).any(1))]
10000 loops, best of 3: 172 µs per loop

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐