首页 文章

Pandas fillna仅适用于具有至少1个非NaN值的行

提问于
浏览
0

假设我有一个像这样构造的DataFrame:

import pandas as pd
import numpy as np

df = pd.DataFrame(data = {"col1":[3, np.nan, np.nan, 21],
                          "col2":[4, np.nan, 12, np.nan],
                          "col3":[33, np.nan, 55, np.nan]})

看起来像这样:

col1     col2     col3
0   3.0      4.0      33.0
1   NaN      NaN      NaN
2   NaN      12.0     55.0
3   21.0     NaN      NaN

我想过滤到列 which have at least 1 non-NaN value ,然后填充到位 .

如果我执行以下操作:

df.loc[df.dropna(thresh=1).index, :].fillna("fill value")

这将创建一个新的DataFrame,其值已正确填充,并删除了所有NaN的行 .

但我想保留所有NaN行,所以我尝试将其应用到位:

df.loc[df.dropna(thresh=1).index, :].fillna("fill value", inplace=True)

但是没有对原始DataFrame进行任何更改 - 我做错了什么?

1 回答

  • 2

    为了澄清,您希望所有NaN行保持为nans,但是用其他NaN填充值?在地方?

    像这样的东西应该工作:

    df.where(df.isnull().all(axis=1), df.fillna(100), inplace=True)
    

    where保持整行为空的值,否则,用df.fillna()值替换它 .

相关问题