pandas 'apply' 函数替换缺失值的问题

problem in pandas 'apply' function to replace missing values

我想使用 'apply' 函数将 np.nan 值替换为 pandas.DataFrame 中的其他值。我将使用 replace 方法,将 NaN 替换为每列的最大值(轴 = 0)。你最好在下面理解。

import pandas as pd

df = pd.DataFrame({'a':[1, np.nan, 3],
                  'b':[np.nan,5,6],
                  'c':[7,8,np.nan]})

result = df.apply(lambda c: c.replace(np.nan, max(c)), axis=0)
print(result)

共有三个 np.nan 值。其中两个被替换为合适的值,但只有一个值仍然是np.nan(下图)

将参数axis设置为1后,还有一个值没有被替换。什么原因?

如果列表以 NaN 开头,

Python 的 max 不起作用;所以 max(df['b'])returns NaN 并且它无法填充该列中的 NaN 值。请改用 c.max()(之所以有效,是因为默认情况下 Series.max 会跳过 NaN)。所以:

df = df.apply(lambda c: c.replace(np.nan, c.max()), axis=0)

但是您可以在轴上使用 fillna 而不是 replace

df = df.fillna(df.max(), axis=0)

输出:

     a    b    c
0  1.0  6.0  7.0
1  3.0  5.0  8.0
2  3.0  6.0  8.0