当所有值都是 NaN 时,Pandas 重新采样以返回 NaN

Posted

技术标签:

【中文标题】当所有值都是 NaN 时,Pandas 重新采样以返回 NaN【英文标题】:Pandas resample to return NaN when all values are NaN 【发布时间】:2022-01-20 14:47:47 【问题描述】:

我正在使用重新采样将我的数据汇总到每小时块中。当一小时的所有输入数据都是 NaN 时,resample 会产生 0 而不是 NaN 的值。

我的原始数据是这样的:

infile
Out[206]:
             Date_time  Rainfall
0  2019-02-02 14:18:00       NaN
1  2019-02-02 14:20:00       NaN
2  2019-02-02 14:25:00       NaN
3  2019-02-02 14:30:00       NaN
4  2019-02-02 14:35:00       NaN
5  2019-02-02 14:40:00       NaN
6  2019-02-02 14:45:00       NaN
7  2019-02-02 14:50:00       NaN
8  2019-02-02 14:55:00       NaN
9  2019-02-02 15:00:00       0.0
10 2019-02-02 15:05:00       NaN
11 2019-02-02 15:10:00       NaN
12 2019-02-02 15:15:00       NaN
13 2019-02-02 15:20:00       NaN
14 2019-02-02 15:25:00       NaN
15 2019-02-02 15:30:00       NaN
16 2019-02-02 15:35:00       NaN
17 2019-02-02 15:40:00       NaN
18 2019-02-02 15:45:00       NaN
19 2019-02-02 15:50:00       NaN
20 2019-02-02 15:55:00       NaN

我希望我的输出是这样的:

             Date_time  Rainfall  
0  2019-02-02 14:18:00       NaN
1  2019-02-02 15:00:00       0.0

但我却得到了这个:

output[['Date_time', 'Rainfall']]
Out[208]: 
                Date_time  Rainfall
0     2019-02-02 14:18:00       0.0
1     2019-02-02 15:00:00       0.0

这是我用来到达那里的代码 - 它比本示例所需的要复杂一些,因为我使用它来遍历其他点的列名列表:

def sum_calc(col_name):
    col =  infile[['Date_time', col_name]].copy()
    col.columns = ('A', 'B')
    col = col.resample('H', on='A').B.sum().reset_index(drop=True)
    output[col_name] = col.copy()

sum_calc('Rainfall')

关于如何让它工作的任何线索?我在网上看了看,如果组中的任何值是 NaN,所有选项似乎都会产生 NaN,而不是像我所追求的所有值。

【问题讨论】:

【参考方案1】:

试试:

>>> df.resample("H", on="Date_time")["Rainfall"].agg(pd.Series.sum, min_count=1)
Date_time
2021-12-17 14:00:00    NaN
2021-12-17 15:00:00    0.0
Freq: H, Name: Rainfall, dtype: float64

【讨论】:

为什么不只是sum 而不是pd.Series.sum sum 不需要min_count。这就是 OP 已经拥有但没有奏效的东西。

以上是关于当所有值都是 NaN 时,Pandas 重新采样以返回 NaN的主要内容,如果未能解决你的问题,请参考以下文章

Python Pandas 查找所有值为 NaN 的所有行

如何使用 fill_value 对 Pandas 中的 TimeSeries 重新采样?

pandas 重新采样以获得具有时间序列数据的月平均值

对“ pandas”系列重新采样时每天保持24小时(从每天到每小时)

重新索引系列返回 Pandas 中的 NaN

Python - Pandas,重新采样数据集以具有平衡的类