【问题标题】:Replace NaN in DataFrame index替换 DataFrame 索引中的 NaN
【发布时间】:2023-03-20 13:24:01
【问题描述】:

我有一个如下所示的 DataFrame:

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

如何将索引中的 NaN 替换为字符串,比如“无标签”?

我试过了:

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

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

得到了

TypeError: expected string or buffer

【问题讨论】:

    标签: pandas replace label dataframe nan


    【解决方案1】:

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

    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
    

    【讨论】:

    • 多哈!那是我应该想到的。这就是我想要的。谢谢!
    • 有一个to_series 方法可以将Index 转换为Seriesdf.index = df.index.to_series().fillna('No label') 可以正常工作
    【解决方案2】:

    使用Index.fillna:

    df.index = df.index.fillna('No label')
    print (df)
              one  two
    a           2    5
    b           3    6
    No label    0    0
    

    【讨论】:

    • 注意:这不适用于 MultiIndex。
    【解决方案3】:

    如果有人也需要处理 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")
    

    【讨论】:

      猜你喜欢
      • 2018-11-14
      • 2016-02-17
      • 2017-04-22
      • 2021-11-20
      • 2021-05-26
      • 1970-01-01
      • 2017-07-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多