我试图找出两个MultiIndex不同形状的Pandas对象之间的区别。我用过:
df1.index.difference(df2)
Run Code Online (Sandbox Code Playgroud)
并接收
TypeError: '<' not supported between instances of 'float' and 'str'
Run Code Online (Sandbox Code Playgroud)
我的索引是 str 和 datetime,但我怀疑那里NaNs隐藏着(浮点数)。因此我的问题是:
在 MultiIndex 某处找到 NaN 的最佳方法是什么?如何遍历级别和名称?我可以使用类似的东西isna()吗?
对于MultiIndex没有实现的许多功能,您可以检查这个。
你需要转换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
Run Code Online (Sandbox Code Playgroud)
或者使用DataFrame构造函数:
print (pd.DataFrame(list(idx.tolist())))
0 1
0 NaN 1
1 1.0 1
2 1.0 2
Run Code Online (Sandbox Code Playgroud)
因为:
print (pd.isnull(idx))
Run Code Online (Sandbox Code Playgroud)
NotImplementedError: isna 没有为 MultiIndex 定义
编辑:
对于检查至少一个True每行使用any带boolean indexing:
df = idx.to_frame()
print (df[df.isna().any(axis=1)])
0 1
NaN 1 NaN 1
Run Code Online (Sandbox Code Playgroud)
也可以过滤MultiIndex,但有必要添加MultiIndex.remove_unused_levels:
print (idx[idx.to_frame().isna().any(axis=1)].remove_unused_levels())
MultiIndex(levels=[[], [1]],
labels=[[-1], [0]])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2260 次 |
| 最近记录: |