替换数据框索引中的 NaN 值

6

我有一个类似于这样的DataFrame:

      one | two 
a   |  2  |  5
b   |  3  |  6
NaN |  0  |  0

如何将索引中的NaN替换为字符串,例如"No label"?

我尝试了以下方法:

df = df.replace(np.NaN, "No label") 

并且。
df.index = df.index.replace(np.NaN, "No label") 

但是得到了
TypeError: expected string or buffer
3个回答

8

你可以先将原始索引处理为一系列,然后重新分配索引:

import pandas as pd
import numpy as np
df = pd.DataFrame({'one': [2, 3, 0], 'two': [5, 6, 0]}, index=['a', 'b', np.nan])
df.index = pd.Series(df.index).replace(np.nan, 'No label')
print df

输出:

          one  two
a           2    5
b           3    6
No label    0    0

哎呀!这就是我应该想到的。这正是我在寻找的功能。谢谢! - Boosted_d16
2
有一个“to_series”方法可以将索引转换为系列:“df.index = df.index.to_series().fillna('No label')”可以正常工作。 - EdChum

5
使用 Index.fillna 方法:
df.index = df.index.fillna('No label')
print (df)
          one  two
a           2    5
b           3    6
No label    0    0

1
注意:此功能不适用于MultiIndex。 - Jongwook Choi

2

如果有人需要处理MultiIndex的情况:

if isinstance(df.index, pd.MultiIndex):
    df.index = pd.MultiIndex.from_frame(
        df.index.to_frame().fillna("No label")
    )
else:
    df.index = df.index.fillna("No label")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接