You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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列的对应值,就会导致匹配逻辑出错。

修复步骤:

  1. 先将df的索引设置为Hour列,确保匹配键的一致性:
df = df.set_index('Hour')
  1. 再执行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 23:10:28