Pandas判断日期是否存在于DataFrame索引时出现误判的问题
问题原因分析
- 最核心的原因是索引类型与待判断值类型不匹配:你打印出来的索引看起来是字符串格式的日期,实际上通过pyEX拉取的DataFrame默认会将日期索引设为
datetime64类型,你用来判断的是字符串类型的日期,部分旧版本的pandas在处理字符串和DatetimeIndex的in逻辑时存在异常,会出现误判。 - 直接使用Python原生的
in关键字判断pandas索引成员本身就不是最优写法,尤其是面对非字符串类型的索引时,很容易出现类型匹配导致的逻辑错误。
解决方法
- 你可以先执行代码
print(df.index.dtype)确认索引类型,如果输出是datetime64[ns]相关类型,把待判断的日期字符串转成datetime格式后再判断即可:
import pandas as pd for i in ['2021-11-18', '2021-04-19', '2021-06-20', '2021-05-10']: check_date = pd.to_datetime(i) if check_date in df.index: print(i + " is an index")
- 更稳妥的通用写法是使用pandas内置的
isin方法,不需要手动处理类型匹配,兼容性更强:
for i in ['2021-11-18', '2021-04-19', '2021-06-20', '2021-05-10']: if df.index.isin([i]).any(): print(i + " is an index")
内容的提问来源于stack exchange,提问作者user17444073
相关产品推荐
相关产品推荐

