如何在Python中同时使用applymap、lambda和数据框来过滤/修改数据框?

4

我试图弄清楚如何替换pd.DataFrame中的NaN。在这个例子中,我创建了3x3的数据框,将值设置为df [1] [2] ='a',其余都是NaN

我的理解是可以在lambda中使用if,并执行下面的操作。但结果与我的期望不符,它覆盖了'a'。我仍希望'a'保持原样,只有NaN更改为'o'…任何建议都将不胜感激。

enter image description here

df = pd.DataFrame(index=range(0,3),columns=range(0,3))
df[1][2] = 'a'
f = lambda x: 'o' if np.nan else x
df.applymap(f)
2个回答

6

你可以使用fillna来替代apply

df.fillna('o')

了解更多有关处理缺失数据的信息。你也可以像@Psidom所提到的那样使用pd.isnull()来结合apply方法,但在这种情况下,你应该真正使用内置函数fillna


3

np.nan并不会返回您期望的值,为了创建有效的谓词,您可以使用pd.isnull

df = pd.DataFrame(index=range(0,3),columns=range(0,3))
df[1][2] = 'a'
f = lambda x: 'o' if pd.isnull(x) else x
df.applymap(f)

#   0   1   2
#0  o   o   o
#1  o   o   o
#2  o   a   o

为了看清楚它为什么会发生,你可以将np.nan转化为布尔值:
bool(np.nan)
# True

因此,它始终返回真值,因此数据框中的所有值都将被替换为o

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接