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
我想使用 '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
后,还有一个值没有被替换。什么原因?
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