Pandas DataFrame匹配指定日期列表出现真值模糊报错如何解决
解决方法
错误原因
- 首次报错是因为
in操作符不能直接作用于Pandas Series,它会尝试把整列数据转换为单个布尔值,因此触发「真值歧义」报错。 - 第二次修改后的代码逻辑错误:
breakout in breakout_candles只会返回一个固定的布尔值,等于让整列日期都和这个固定布尔值做匹配,自然无法得到预期结果。
正确实现
Pandas提供了isin()方法专门用于逐行判断Series中的元素是否存在于目标列表中,直接配合np.where即可实现需求:
df['BTCgtRES'] = np.where(df['date'].isin(breakout_candles), 1, -1)
也可以不用numpy,直接通过map方法实现:
df['BTCgtRES'] = df['date'].isin(breakout_candles).map({True: 1, False: -1})
注意事项
需要确认df['date']列的时区和breakout_candles中Timestamp的时区一致(示例中均为UTC),否则会出现匹配失败的情况。如果时区不一致,可以先统一时区再匹配:
# 示例:将date列时区统一为UTC df['date'] = pd.to_datetime(df['date']).dt.tz_convert('UTC')
内容的提问来源于stack exchange,提问作者Cartagho07
相关产品推荐
相关产品推荐

