Pandas 用 1 替换数据帧的所有非 NaN 条目,单独保留 NaN

rwa*_*rwa 2 python nan dataframe pandas

如何将 Pandas 数据框中的所有非 NaN 值替换为 1 但单独保留 NaN 值?几乎就是我正在寻找的。问题是它也使 NaN 值为 0。然后我必须将它们重置为 NaN 之后。

我想要这个

    a    b
0  NaN  QQQ
1  AAA  NaN
2  NaN  BBB
Run Code Online (Sandbox Code Playgroud)

成为这个

    a    b
0  NaN   1
1   1   NaN
2  NaN   1
Run Code Online (Sandbox Code Playgroud)

这段代码几乎就是我想要的

newdf = df.notnull().astype('int')
Run Code Online (Sandbox Code Playgroud)

上面的代码是这样做的

    a    b
0   0   1
1   1   0
2   0   1
Run Code Online (Sandbox Code Playgroud)

joh*_*ase 6

一种方法是从原始数据框中选择所有非空值并将它们设置为一:

df[df.notnull()] = 1

此解决方案对您的数据:

df = pd.DataFrame({'a': [np.nan, 'AAA', np.nan], 'b': ['QQQ', np.nan, 'BBB']})
df[df.notnull()] = 1

df 
    a   b
0   NaN 1
1   1   NaN
2   NaN 1
Run Code Online (Sandbox Code Playgroud)

  • 而且,只是为了好玩,另一个违反直觉的(对我来说)注意:布尔掩码解决方案在“1.2 ms”中运行,“np.where”解决方案在“512 µs”中运行。去搞清楚! (2认同)