【问题标题】:pandas update specific row with nan values熊猫用 nan 值更新特定行
【发布时间】:2018-08-08 22:40:10
【问题描述】:

我一直在浏览,但找不到特定问题的答案。

我有一个包含数百列和数百行的数据框。我只想更改第一行出现的 NaN 值并将它们替换为空字符串。已针对更改列或整个数据框而不是特定行来回答此问题。我也不想修改其他行中出现的 NaN。

我尝试了以下方法:

dataframe.loc[0].replace(np.nan, '', regex=True)

我也尝试过:

dataframe.update(dataframe.loc[0].fillna(''))

但是当我调用数据框时,它没有被修改。任何帮助将不胜感激!

【问题讨论】:

    标签: pandas replace row nan fillna


    【解决方案1】:

    考虑数据框df

    np.random.seed([3, 1415])
    
    df = pd.DataFrame(
        np.random.choice([1, np.nan], size=(4, 4)),
        list('WXYZ'), list('ABCD')
    )
    
    df
    
         A    B    C    D
    W  1.0  NaN  1.0  NaN
    X  1.0  1.0  NaN  1.0
    Y  NaN  NaN  NaN  NaN
    Z  1.0  NaN  NaN  1.0
    

    如果我们使用非标量,即类似数组的东西来选择第一行,我们将得到一个pd.DataFrame 对象,可以方便地fillna 并传递给pd.DataFrame.update

    df.update(df.iloc[[0]].fillna(''))
    df
    
         A    B    C    D
    W  1.0       1.0     
    X  1.0    1  NaN    1
    Y  NaN  NaN  NaN  NaN
    Z  1.0  NaN  NaN    1
    

    请注意,我在iloc 中使用[0] 而不是0

    【讨论】:

    • 非常感谢!!!这完美地工作。为什么将 loc 更改为 iloc 工作?我的索引名称也是 0,所以我认为使用 loc[0] 与 iloc[0] 相同
    • iloc[0] 表示按位置取第一行。 loc[0] 表示选择标记为0 的行,这可能是也可能不是第一行。
    猜你喜欢
    • 2017-08-13
    • 2017-06-24
    • 2017-10-21
    • 2016-08-22
    • 2016-03-26
    • 1970-01-01
    • 2021-07-05
    • 2023-01-23
    • 1970-01-01
    相关资源
    最近更新 更多