【发布时间】:2017-01-22 23:11:08
【问题描述】:
阅读带有 MultiIndex 的 excel 工作表后,我在索引中出现了 np.nan,因为其中一些值是“N/A”并且 pd.read_excel 认为转换它们是个好主意。但是我想将它们保留为“N/A”以保留多索引。我认为使用MultiIndex.fillna 将它们改回来很容易,但我收到了这个错误:
index = pd.MultiIndex(levels=[[u'foo', u'bar'], [u'one', np.nan]],
codes=[[0, 0, 1, 1], [0, 1, 0, 1]],
names=[u'first', u'second'])
df = pd.DataFrame(index=index, columns=['A', 'B'])
df
df.index.fillna("N/A")
输出:
---------------------------------------------------------------------------
NotImplementedError Traceback (most recent call last)
<ipython-input-17-09e14dcdc74f> in <module>
----> 1 df.index.fillna("N/A")
/anaconda3/envs/torch/lib/python3.7/site-packages/pandas/core/indexes/multi.py in fillna(self, value, downcast)
1456 fillna is not implemented for MultiIndex
1457 """
-> 1458 raise NotImplementedError("isna is not defined for MultiIndex")
1459
1460 @Appender(_index_shared_docs["dropna"])
NotImplementedError: isna is not defined for MultiIndex
更新:
更新代码以反映 Pandas 1.0.2。在 0.24.0 版本之前,pd.MultiIndex 的 codes 属性称为 labels。此外,回溯详细信息从isnull is not defined 更改为isna is not defined,如上。
【问题讨论】:
-
我猜这是一种解决方案:
new_index = pd.MultiIndex(levels=[index.levels[0].fillna('N/A'), index.levels[1].fillna('N/A')], labels=index.labels, names=index.names)但我的实际数据框是 6 级 MultiIndex,所以有点乱! -
我建议在没有任何索引提示的情况下加载数据帧,按摩 NA 的东西,然后 set_index。你有什么理由不能按那个顺序继续?
-
感谢@Boud,这也可以。
标签: pandas dataframe nan multi-index