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

如何用未来一周数据替换时间序列价格列的缺失值(Python)

解决时间序列缺失值替换问题

先点明你代码里的核心问题:

  • 用replace把指定日期范围的值换成字符串'NaN'是错误的,pandas识别的缺失值是np.nan,字符串'NaN'不会被当作缺失值处理,后续操作会出问题。
  • 后续用replace批量替换的逻辑不对,replace是按值匹配替换,不是按位置批量赋值,达不到你想要的效果。

下面是正确的实现步骤:

1. 正确创建带缺失值的时间序列DataFrame

不用绕弯子用replace,直接通过索引定位赋值np.nan更直接:

import pandas as pd
import numpy as np

# 创建日期索引和随机数据
time = pd.date_range(start='2015-01-01', end='2015-01-20', freq='D')
sampl = np.random.uniform(low=-4.5, high=34.0, size=(20,))
df = pd.DataFrame({"prices": sampl}, index=time)

# 将指定日期范围设为缺失值(pandas标准缺失值)
df.loc['2015-01-01':'2015-01-07', 'prices'] = np.nan

2. 筛选缺失值所在行

如果要查看指定日期范围的缺失值行,直接索引定位即可:

# 筛选2015-01-01至2015-01-07的缺失值行
missing_rows = df.loc['2015-01-01':'2015-01-07']
print(missing_rows)

# 如果要筛选整个DataFrame中所有prices列有缺失值的行
all_missing_rows = df[df['prices'].isna()]

3. 用未来一周的值替换缺失值

因为索引是连续的时间序列,直接把未来一周的值赋值到缺失范围即可,注意加.values避免索引对齐问题:

# 用2015-01-08至2015-01-14的值替换2015-01-01至2015-01-07的缺失值
df.loc['2015-01-01':'2015-01-07', 'prices'] = df.loc['2015-01-08':'2015-01-14', 'prices'].values

针对你的原始小时数据的适配

你的原始数据是小时级(2015-01-01 00:00到2015-12-31 23:00),缺失范围是2015-01-01至2015-01-04,处理逻辑完全一致:

# 假设你的原始DataFrame名为raw_df
# 1. 确保索引是datetime类型(如果不是先转换)
raw_df.index = pd.to_datetime(raw_df.index)

# 2. 若原始数据未自动标记缺失值,手动设置缺失范围
raw_df.loc['2015-01-01':'2015-01-04', 'prices'] = np.nan

# 3. 用之后4天的小时数据替换缺失值
raw_df.loc['2015-01-01':'2015-01-04', 'prices'] = raw_df.loc['2015-01-05':'2015-01-08', 'prices'].values

内容的提问来源于stack exchange,提问作者pdata

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 06:15:29