为何无法用自定义列表过滤Pandas Series日期索引?
问题原因分析
日期类型不匹配:oil_series的索引是Pandas的
datetime64[ns]类型,但你定义的dates列表里的元素可能是普通字符串、Python原生datetime.date对象,而非Pandas的Timestamp类型。isin()方法会严格校验类型,类型不一致时无法识别匹配的日期,导致mask里的布尔值不符合预期,最终用loc访问时触发报错。时区不一致:如果oil_series的索引是带时区的
datetime64[ns, tz]类型,而dates里的日期未设置时区,哪怕日期数值完全相同,isin()也会判定为不匹配。mask逻辑失效后,后续的loc操作自然会出现问题。日期格式不统一:比如dates里的日期字符串格式和索引的格式不统一(索引是
2023-01-01,dates里是01/01/2023),即便尝试转换为日期类型,也会因为格式解析错误导致匹配失败,mask无法生成正确的过滤条件,进而引发报错。缺失值导致布尔数组异常:要是oil_series中存在NaN值,
oil_series <=50会生成包含NaN的布尔数组,和index.isin(dates)的结果做&运算时,NaN会被当作False处理,或者直接因为布尔数组包含非布尔值,让loc操作触发类型错误。
内容的提问来源于stack exchange,提问作者Yimbanji Mutambo
相关产品推荐
相关产品推荐

