我发现了两种基于条件替换 Dataframe 中某些值的形式:
1..位置
mask = df['param'].isnull()
df.loc[mask, 'param'] = 'new_value'
1.名词,其中()
mask = df['param'].isnull()
df['param'] = np.where(mask, 'new_value', df['param'])
这两种形式都很好用,但是哪一种更好呢?关于这个问题,什么时候应该使用**.loc**,什么时候应该使用np.where?
3条答案
按热度按时间neskvpey1#
这不是一个贯穿测试,但这里有一个样本,在每次运行(
loc
,np.where
)时,数据都被重置为原始的随机数。玩具数据1
这里的
np.nan
超过了有效值。而且,该列是float类型。玩具资料二:
这里的
np.nan
小于有效值,并且列为对象类型:同样的故事:
因此,与@cs95的评论相反,
loc
似乎优于np.where
。yyyllmsg2#
值得一提的是,我正在处理一个非常大的数据集(数百万行,100+列),我使用df.loc进行简单的替换,通常需要几个小时。当我更改为np.where时,它立即工作。
2exbekwf3#
代码在jupyter笔记本中运行
我有一个关于第三种编写方式的问题,为什么df1.loc[np.where(df1.a.values==2),'a']= 8报告错误