大熊猫数据框选择纳米索引

les*_*l0l 14 python pandas

我有一个df包含以下内容的数据框:

In [10]: df.index.unique()
Out[10]: array([u'DC', nan, u'BS', u'AB', u'OA'], dtype=object)
Run Code Online (Sandbox Code Playgroud)

我可以轻松选择df.ix ["DC"],df.ix ["BS"]等.但是我在选择nan索引时遇到了麻烦.

df.ix[nan], df.ix["nan"], df.ix[np.nan] all won't work.
Run Code Online (Sandbox Code Playgroud)

如何选择nan作为索引的行?

unu*_*tbu 16

一种方法是用于df.index.isnull()识别NaN的位置:

In [218]: df = pd.DataFrame({'Date': [0, 1, 2, 0, 1, 2], 'Name': ['A', 'B', 'C', 'A', 'B', 'C'], 'val': [0, 1, 2, 3, 4, 5]}, index=['DC', np.nan, 'BS', 'AB', 'OA', np.nan]); df
Out[218]: 
     Date Name  val
DC      0    A    0
NaN     1    B    1
BS      2    C    2
AB      0    A    3
OA      1    B    4
NaN     2    C    5

In [219]: df.index.isnull()
Out[219]: array([False,  True, False, False, False,  True], dtype=bool)
Run Code Online (Sandbox Code Playgroud)

然后你可以使用df.loc以下方法选择那些行

In [220]: df.loc[df.index.isnull()]
Out[220]: 
     Date Name  val
NaN     1    B    1
NaN     2    C    5
Run Code Online (Sandbox Code Playgroud)

注:我用原来的答案pd.isnull(df.index),而不是零的建议,df.index.isnull().最好使用df.index.isnull()因为对于不能容纳NaN的索引类型,例如Int64IndexRangeIndex,该isnull方法立即返回所有False值的数组,而不是盲目地检查索引中的每个项目的NaN值.