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

Python Pandas Resample:重采样时如何保留NaN值?

解决月度重采样季度时保留NaN的问题

当使用pandas将月度数据重采样为季度数据时,当前代码对包含NaN的季度(如1989年Q4,其中12月为NaN)仍会计算非NaN值的总和,需求是让该季度结果保持为NaN。

原始数据

HS6P1
Jan1989  69.9
Feb1989  59.3
Mar1989  83.5
Apr1989  100.4
May1989  101.4
Jun1989  100.3
Jul1989  98
Aug1989  91.7
Sep1989  82.4
Oct1989  91.3
Nov1989  72.6
Dec1989  NaN

当前代码

df=pd.read_excel(input_file, sheet_name='Sheet1', usecols='A:D', na_values='ND', index_col=0, header=0)
df.index.names = ['Period']
df.index = pd.to_datetime(df.index)

q0= pd.Series(df['HS6P1'], index=df.index)

m1 = q0.resample('Q').sum()

当前输出

Period
1989-03-31    212.7
1989-06-30    302.1
1989-09-30    272.1
1989-12-31    163.9

期望输出

Period
1989-03-31    212.7
1989-06-30    302.1
1989-09-30    272.1
1989-12-31    NaN

调整方法

pandas的sum()方法默认参数skipna=True,会忽略NaN值进行求和。只需将该参数改为False,即可让包含NaN的分组返回NaN:

修改后的代码:

df=pd.read_excel(input_file, sheet_name='Sheet1', usecols='A:D', na_values='ND', index_col=0, header=0)
df.index.names = ['Period']
df.index = pd.to_datetime(df.index)

q0= pd.Series(df['HS6P1'], index=df.index)

# 关键修改:添加skipna=False参数
m1 = q0.resample('Q').sum(skipna=False)

原理说明

  • skipna=False会让聚合函数在遇到NaN时直接返回NaN,而非跳过NaN计算剩余值的总和。
  • 对于无NaN的分组(如1989年Q1-Q3),求和结果不受影响,仍会正常计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 03:41:42