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
相关产品推荐
相关产品推荐

