【问题标题】:Finding NaN Values in Pandas MultiIndex在 Pandas MultiIndex 中查找 NaN 值
【发布时间】:2019-01-07 15:09:53
【问题描述】:

我试图找出两个不同形状的 Pandas MultiIndex 对象之间的区别。我用过:

df1.index.difference(df2)

并接收

TypeError: '<' not supported between instances of 'float' and 'str'

我的索引是 str 和 datetime,但我怀疑那里隐藏着 NaNs(浮动)。因此我的问题是:

在 MultiIndex 中的某处找到 NaN 的最佳方法是什么?如何遍历关卡和名称?我可以使用isna() 之类的东西吗?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    对于MultiIndex没有实现很多功能,可以查看this

    您需要先将MultiIndex 转换为DataFrame MultiIndex.to_frame

    #W-B sample
    idx=pd.MultiIndex.from_tuples([(np.nan,1),(1,1),(1,2)])
    
    print (idx.to_frame())
             0  1
    NaN 1  NaN  1
    1   1  1.0  1
        2  1.0  2
    
    print (idx.to_frame().isnull())
               0      1
    NaN 1   True  False
    1   1  False  False
        2  False  False
    

    或者使用DataFrame构造函数:

    print (pd.DataFrame(list(idx.tolist())))
         0  1
    0  NaN  1
    1  1.0  1
    2  1.0  2
    

    因为:

    print (pd.isnull(idx))
    

    NotImplementedError: isna 没有为 MultiIndex 定义

    编辑:

    要检查每行至少一个True,请使用anyboolean indexing

    df = idx.to_frame()
    print (df[df.isna().any(axis=1)])
            0  1
    NaN 1 NaN  1
    

    也可以过滤MultiIndex,但必须加MultiIndex.remove_unused_levels

    print (idx[idx.to_frame().isna().any(axis=1)].remove_unused_levels())
    MultiIndex(levels=[[], [1]],
               labels=[[-1], [0]])
    

    【讨论】:

    • 谢谢,这很好。非常简单的跟进:我如何过滤它以查找True 的行? (我的多索引很大)
    【解决方案2】:

    我们可以使用 reset_index ,然后使用 isna

    idx=pd.MultiIndex.from_tuples([(np.nan,1),(1,1),(1,2)])
    df=pd.DataFrame([1,2,3],index=idx)
    df.reset_index().filter(like='level_').isna()
    Out[304]: 
       level_0  level_1
    0     True    False
    1    False    False
    2    False    False
    

    【讨论】:

    • 这很好 - 但是当我执行 reset_index 时,它不会预先添加 level_(这是默认行为吗?)所以过滤器找不到任何东西
    • @JoshFriedlander 因为我的索引没有名称,如果您索引有名称,只需使用您的索引名称
    猜你喜欢
    • 2017-01-22
    • 2017-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-20
    • 2015-01-25
    • 2013-07-29
    • 2018-02-02
    相关资源
    最近更新 更多