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

我想过滤到至少有 1 个 non-NaN value的列,然后 fillna 就位。

如果我执行以下操作:

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

这将创建一个新的 DataFrame,该 DataFrame 具有正确填充的值,并删除了全为 NaN 的行。

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

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

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

4

1 回答 1

3

澄清一下,您希望所有 NaN 行都保持为 nan,但用​​一个值填充其他 NaN?并就地?

像这样的东西应该工作:

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

where 保留整行为空的值,否则将其替换为 df.fillna() 值。

于 2018-05-24T20:33:02.040 回答