Pandas按日期列表子集重索引遇NaN问题求助
解决方法
方法1:将日期列表转为datetime类型后重索引
问题根源在于month_list是字符串数组,而DataFrame的索引是datetime64类型,两者类型不匹配导致重索引时无法匹配对应行,出现NaN。只需把日期列表转为datetime类型即可:
# 将字符串日期列表转为datetime类型 month_list_dt = pd.to_datetime(month_list) # 执行重索引 df_reindexed = df.reindex(month_list_dt)
执行后即可得到你期望的结果,不会出现NaN值。
方法2:直接用.loc筛选(更高效,适合子集提取)
如果你的需求只是提取DataFrame中已存在的日期子集,使用loc直接筛选比reindex更高效,同样需要保证类型一致:
# 转换日期列表为datetime类型 month_list_dt = pd.to_datetime(month_list) # 筛选对应行 df_filtered = df.loc[month_list_dt]
类型匹配验证技巧
可以通过以下代码确认索引与日期列表的类型是否一致:
# 查看DataFrame索引类型 print(df.index.dtype) # 查看转换前后日期列表的元素类型 print(type(month_list[0])) print(type(month_list_dt[0]))
确保两者均为datetime64[ns]类型,即可实现完美匹配。
内容的提问来源于stack exchange,提问作者user2100039
相关产品推荐
相关产品推荐

