Python重采样: How do I keep NaN as NaN?

标签 python pandas-resample

当从每月数据重新采样到季度数据时,我希望最后一个值 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

enter image description here

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/

相关文章:

python - 如何自动备份 Azure Web Apps 上托管的 Django 应用程序中的 db.sqlite3 文件?

python - 使用类型创建类时如何定义__str__函数?

python - 验证 RTSP 流 URL [python] 的最佳方法是什么

python - 导入错误 : No module named flask on google app engine

Python机器学习: Using Multinomial Naive Bayes gives Multiprocessing exception

python - 以原点 ='end_day' 重新采样

python - 按周重新采样数据

python - 使用 pandas GroupBy 和时间序列重采样进行平均聚合