繁体   English   中英

如何使用applymap,lambda和dataframe一起过滤/修改python中的数据帧?

[英]How to use applymap, lambda and dataframe together to filter / modify dataframe in python?

所以我想弄明白如何在pd.DataFrame替换NaN ..? 在这个示例中,我创建了3x3数据帧,其值为df[1][2] = 'a' ,其余为NaN

我的理解是我可以在lambda使用if并在下面做一些事情。 但结果不是我所期望的,它覆盖了'a' 我仍然希望'a'保持原样并且只改为'o'在哪里是NaN ...任何建议都将受到赞赏。

在此输入图像描述

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)

您可以使用fillna而不是使用apply

df.fillna('o')

有关使用缺失数据的更多信息。 你也可以在@Psidom的答案中使用apply with pd.isnull()作为mentaioned。 但在这种情况下,你应该真正使用内置函数fillna

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转换为boolean:

bool(np.nan)
# True

所以它总是返回真值,因此数据帧中的所有值都将被o替换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM