You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pandas按对应半小时时段的均值填充DataFrame中的NaN值

Pandas按对应半小时时段的均值填充DataFrame中的NaN值

当然可以实现这个需求啦!这是一种非常合理的时间序列缺失值填充方式,用对应半小时时段的整体均值来补全NaN,能很好保留数据的时段特征。下面是具体的实现步骤:

步骤1:确保时间列格式正确并提取半小时时段

首先要保证StartTime是datetime类型(如果原数据还没转换的话),然后提取出对应的半小时时段(比如00:00:00、00:30:00这类时间值):

# 转换StartTime为datetime类型(如果原数据不是的话)
Data['StartTime'] = pd.to_datetime(Data['StartTime'])
# 提取半小时时段列
Data['HH'] = Data['StartTime'].dt.time

步骤2:计算每个半小时时段的均值

接下来计算每个HH对应的Values列的均值,注意你之前的代码里groupby的列名写错了,应该是['Values']而非['Data']:

# 按HH分组计算均值
hh_means = Data.groupby('HH')['Values'].mean().reset_index()

这一步会得到每个半小时时段的均值表,和你展示的结果一致。

步骤3:用时段均值填充NaN值

这里给你两种简单的实现方式:

方法一:使用map快速映射填充

这种方式代码更简洁,直接把HH列映射到对应的均值来补全NaN:

# 把HH列映射到对应均值,填充Values的NaN
Data['Values'] = Data['Values'].fillna(Data['HH'].map(hh_means.set_index('HH')['Values']))

方法二:使用merge合并填充

如果你需要更清晰的中间过程,可以用合并的方式:

# 合并均值表到原数据
Data = Data.merge(hh_means, on='HH', suffixes=('', '_mean'))
# 用均值填充NaN
Data['Values'] = Data['Values'].fillna(Data['Values_mean'])
# 删掉临时的均值列(不需要的话)
Data = Data.drop(columns='Values_mean')

验证结果

最后可以检查一下NaN是否都被填充完成:

print(Data.isna().sum().sum())

正常情况下输出应该是0,说明所有NaN都被成功替换了。

备注:内容来源于stack exchange,提问作者K.Best

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 15:27:31