DataFrame值过滤报错:ValueError: setting an array element with a sequence
DataFrame值过滤与NaN替换问题
原始数据
有如下DataFrame:
VELWIND 0 1 34 54 2 3 25
需求
过滤出0到30之间的值,将≥30的数值替换为NaN,最终生成的列类型为float64。
错误尝试及问题
最初使用的代码:
df['VELWIND_filt']=df.loc[(df['VELWIND'] > 0) & (df['VELWIND'] < 30) & (df['VELWIND'] >=30, np.nan)]
运行后报错:
ValueError: setting an array element with a sequence.
经排查,错误出在(df['VELWIND'] >=30, np.nan)部分,这种写法不符合pandas的语法逻辑,无法正确实现条件替换。
正确代码
使用np.where可简洁实现需求:
df['VELWIND_filt'] = np.where((df['VELWIND'] < 0) | (df['VELWIND'] >= 30), np.nan, df['VELWIND'])
这段代码逻辑为:当VELWIND的值小于0或大于等于30时替换为NaN,否则保留原数值,最终列会自动转换为float64类型。
内容的提问来源于stack exchange,提问作者Chub
相关产品推荐
相关产品推荐

