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

如何用特定12个月的数据填充DataFrame中的NaN值

解决DataFrame中用最后12个月数据循环填充NaN的问题

解决方案思路

要实现用最后12个月的价格循环填充后续NaN,核心是先提取出作为循环模板的12个月数据,再将该模板重复足够次数后填充到缺失位置,具体步骤如下:

  1. 确保价格列是数值类型(避免字符串格式导致的计算问题)
  2. 提取最后12个非空的价格数据作为循环模板
  3. 计算需要填充的NaN数量,生成对应长度的循环序列
  4. 将循环序列赋值到NaN所在的行

完整代码实现

import pandas as pd

# 构建示例数据
mat = pd.DataFrame(pd.date_range('01/01/2020','01/01/2022',freq='MS'))
prices = pd.DataFrame(['179.06','174.6','182.3','205.59','204.78','202.19','216.17','218.69','220.73','223.28','225.16','226.31'])

example = pd.concat([mat,prices],axis=1)
example.columns = ['maturity', 'price']

# 1. 将价格列转换为数值类型
example['price'] = pd.to_numeric(example['price'])

# 2. 提取最后12个非空价格作为循环模板
template = example['price'].dropna().tail(12).values

# 3. 计算需要填充的NaN数量,生成循环填充序列
nan_count = example['price'].isna().sum()
# 重复模板直到覆盖所有NaN,再截取对应长度
fill_values = template.tolist() * (nan_count // len(template) + 1)
fill_values = fill_values[:nan_count]

# 4. 填充NaN值
example.loc[example['price'].isna(), 'price'] = fill_values

# 查看结果
print(example)

代码说明

  • 转换数值类型:原示例中价格是字符串格式,必须转为数值才能进行后续填充操作
  • 提取循环模板:dropna().tail(12)会自动筛选出最后12个非空的价格数据,适配你实际场景中2027-06前最后12个月的有效数据
  • 生成循环序列:通过*运算符重复模板,再截取到需要的长度,确保刚好覆盖所有NaN
  • 填充NaN:通过loc定位到NaN的行,直接赋值循环序列

执行后,2021年1-12月会依次填充2020年1-12月的价格,2022年1月填充2020年1月的价格,完美实现循环填充的效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 07:54:10