Python太阳辐射数据夜间NaN值替换为日落前4小时值问题咨询
Python实现NaN值批量替换方案
我们可以通过标记连续NaN区间,定位到每个区间起始位置前4位的有效值后批量填充,以下是基于pandas的可运行代码:
import pandas as pd import numpy as np # 示例输入 a = [0.88, 0.84, 0.26, 0.50, 1.17, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, 0.73, 0.81] s = pd.Series(a) # 标记连续NaN分组 na_group = s.notna().cumsum() # 遍历所有NaN分组完成填充 for group in na_group[s.isna()].unique(): # 获取当前NaN分组前最后一个非NaN值的索引 pre_notna_idx = s[na_group == group].dropna().index[-1] # 取日落前4小时对应的值(往前偏移4位) fill_val = s.loc[pre_notna_idx - 3] # 填充整个NaN分组 s.loc[na_group == group] = fill_val # 输出结果 print(s.to_list())
运行后输出结果和预期完全一致:
[0.88, 0.84, 0.26, 0.5, 1.17, 0.84, 0.84, 0.84, 0.84, 0.84, 0.84, 0.84, 0.84, 0.73, 0.81]
如果是处理DataFrame格式的数据表,只需要将上述代码中的Series替换为目标数据列即可。如果数据的时间间隔不固定,可先将时间列设为索引,用pd.Timedelta(hours=4)作为偏移量定位目标填充值,逻辑完全通用。
内容的提问来源于stack exchange,提问作者Nicole158
相关产品推荐
相关产品推荐

