Pandas按Hour列Join时数据错位及NaN异常问题求助
问题描述
我尝试将两个DataFrame按「Hour」列执行join操作:
- 一个DataFrame(
wr)包含11年间每小时的日期时间及各类平流参数 - 另一个DataFrame(
df)是11年间24小时各自的平均值
注:因采样器维护,两个DataFrame均缺失第4小时,此为正常情况。但执行join后出现以下问题:
- 右侧DataFrame的第5小时被跳过,第6小时与左侧第5小时对齐,该错位持续至左侧第22小时
- 左侧第23小时对应的右侧数据全为NaN,且该问题每日重复
附上我的代码:
import pandas as pd wr = pd.read_csv('') df = pd.read_csv('') wr["date"] = wr["date"].astype("M8") wr["Month"] = wr.date.dt.month wr['Hour'] = wr.date.dt.hour comb = wr.join(df, on='Hour', how='left', rsuffix = '_clim')
问题分析与解决
出现错位的核心原因是**df的索引和Hour列不匹配**。pd.join()默认按索引对齐,当你指定on='Hour'时,如果df的索引不是Hour列的对应值,就会导致匹配逻辑出错。
修复步骤:
- 先将
df的索引设置为Hour列,确保匹配键的一致性:
df = df.set_index('Hour')
- 再执行join操作,此时
wr的Hour列会正确匹配df的索引:
comb = wr.join(df, on='Hour', how='left', rsuffix='_clim')
额外验证建议:
- 打印
df.index.unique(),确认索引包含0-3、5-23(除缺失的4外的所有小时) - 用
wr['Hour'].value_counts()和df.index.value_counts()对比小时分布,确保除4之外的小时在两个DataFrame中都存在
内容的提问来源于stack exchange,提问作者obscuredbyclouds
相关产品推荐
相关产品推荐

