当从每月数据重新采样到季度数据时,我希望最后一个值 NaN 保持为 NaN。我应该如何调整我的代码?
谢谢
HS6P1
1989年1月69.9
1989 年 2 月 59.3
89年3月83.5
1989年4月100.4
1989年5月101.4
1989年6月100.3
1989年7月98
1989年8月91.7
1989年9月82.4
1989 年 10 月 91.3
1989 年 11 月 72.6
1989 年 12 月 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()
电流输出
期间
1989-03-31 212.7
1989-06-30 302.1
1989-09-30 272.1
1989-12-31 163.9
所需输出
期间
1989-03-31 212.7
1989-06-30 302.1
1989-09-30 272.1
1989-12-31 南
最佳答案
你可以这样尝试。但如果其他地方有 NaN,那么该部分的和将是 NaN。 Here是有关此主题的信息。 np.nan + 1
,那么输出将为nan
。 nan 将其触及的所有内容都转换为 nan。
res = q0.resample('Q').apply(lambda x: np.sum(x.values))
还有另一个选择。 不知道适不适合呢?使用 min_count=3 参数。理论上,一个季度有3个值,如果缺少一些值,就会出现NaN。
m1 = q0.resample('Q').sum(min_count=3)
如果您需要在最后一个季度准确地返回 NaN,并且那里至少有一个空值。
def my_func(x):
return [x.sum(), np.isnan(x).any()]
qqq = q0.resample('Q').apply(my_func)
if qqq[-1][1] == True:
qqq[-1][0] = np.nan
qqq = pd.Series(qqq.str[0], index=qqq.index)
关于Python重采样: How do I keep NaN as NaN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74710834/