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

时间序列重采样输出异常问题求助:月度重采样结果不符合预期

问题排查与解决方案

先拆解你遇到的几个核心问题:月度结果出现NaN、求和值异常(比如64.5),还有日期格式的困惑,咱们一步步来解决。

问题根源分析

  1. 日期索引未正确配置
    如果你的日期列只是普通字符串,没有转换成datetime类型并设为DataFrame的索引,resample函数根本无法正确识别时间维度,会导致计算逻辑混乱,甚至出现奇怪的数值。
  2. 缺失日期未补全
    原始数据存在缺失日期(比如10月2日),默认的resample只会对已有数据点计算,缺失日期的数值会被直接忽略。如果某个月完全没有数据点,就会返回NaN——这就是2015-02-28出现NaN的原因。
  3. 异常小数(64.5)的可能原因
    这个小数大概率是因为原始数据中存在非整数数值,或者索引有重复日期(同一日期有多条记录,求和后出现小数);当然也有可能是你不小心误用了mean()而非sum()(不过你明确说用了sum(),这条可以排除)。

分步解决方案

第一步:修复日期索引

先把日期列转换成datetime类型,并设置为DataFrame的索引:

import pandas as pd

# 假设你的日期列名为'date',数值列名为'individuals'
df['date'] = pd.to_datetime(df['date'])
df = df.set_index('date')

第二步:补全日度缺失数据并填充0

你提到部分日期值为0、部分缺失,我们需要先把时间序列补全为连续的日度数据,缺失日期填充为0,这样月度求和才会包含所有日期的数值:

# 补全日度数据,缺失日期填充0
df_daily = df.asfreq('D', fill_value=0)

第三步:重采样月度求和

现在再进行月度重采样求和,结果就会符合预期:

df_monthly = df_daily['individuals'].resample('M').sum()

第四步:调整日期格式(按需)

你期望的日期格式看起来是笔误(2015-31-10应该是2015-10-31,即年-月-日的当月最后一天),如果需要修改索引显示格式,可以这样做:

# 转换成标准年-月-日格式(比如2015-10-31)
df_monthly.index = df_monthly.index.strftime('%Y-%m-%d')

# 如果确实需要年-日-月格式(不推荐,不符合常规日期规范)
# df_monthly.index = df_monthly.index.strftime('%Y-%d-%m')

验证结果

经过以上步骤后,你的月度数据会显示每个月所有日期的数值之和,无数据的月份会显示0而非NaN;如果原始数据都是整数,求和结果也会是整数,不会出现奇怪的小数。

内容的提问来源于stack exchange,提问作者Mannheimer_Coder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 21:47:31