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

如何补全JSON中1996-2011缺失年份 对应值填充为0

问题可行性结论

该需求完全可以实现,不需要复杂工具,仅需按照固定逻辑处理数据即可,核心是保证年份序列连续、缺失值统一填0、原始非年度的特殊字段(如TTM)保留原有位置。

核心处理逻辑
  • 先对齐原始数据中ArrayYears和ArrayValue的索引对应关系,将非年度的TTM项单独提取存储,避免混入年度序列处理
  • 生成1988年到2021年的连续年度字符串序列,和原数据的年份格式保持一致
  • 遍历生成的完整年度序列,对应年份存在原始值则取原始值,不存在则填充0
  • 将单独存储的TTM项追加到补全后的年度序列、数值序列末尾,还原原始数据结构
可直接运行的代码示例

JavaScript版本

const rawData = {
  "data": {
    "ArrayValue": [
      0.0030350000000000004, 0.003661, 0.0080348532, 0.0053554275, 0.004284,
      0.008569710000000001, 0.008569710000000001, 0.007498282499999999, 0.189286,
      0.42142999999999997, 0.461429, 0.5075000000000001, 0.5575, 0.615, 0.705,
      0.76, 0.8075, 0.865, 0.89
    ],
    "ArrayYears": [
      "1988","1989","1990","1991","1992","1993","1994","1995","2012","2013",
      "2014","2015","2016","2017","2018","2019","2020","2021","TTM"
    ]
  }
};

// 构建年份-值映射,分离TTM项
const yearValueMap = new Map();
let ttmValue = null;
rawData.data.ArrayYears.forEach((year, idx) => {
  if (year === 'TTM') {
    ttmValue = rawData.data.ArrayValue[idx];
    return;
  }
  yearValueMap.set(year, rawData.data.ArrayValue[idx]);
});

// 生成完整序列并填充缺失值
const fullYears = [], fullValues = [];
for (let y = 1988; y <= 2021; y++) {
  const yStr = String(y);
  fullYears.push(yStr);
  fullValues.push(yearValueMap.get(yStr) ?? 0);
}
// 还原TTM项
fullYears.push('TTM');
fullValues.push(ttmValue);

const fixedData = { data: { ArrayValue: fullValues, ArrayYears: fullYears } };

Python版本

raw_data = {
    "data": {
        "ArrayValue": [
            0.0030350000000000004, 0.003661, 0.0080348532, 0.0053554275, 0.004284,
            0.008569710000000001, 0.008569710000000001, 0.007498282499999999, 0.189286,
            0.42142999999999997, 0.461429, 0.5075000000000001, 0.5575, 0.615, 0.705,
            0.76, 0.8075, 0.865, 0.89
        ],
        "ArrayYears": [
            "1988","1989","1990","1991","1992","1993","1994","1995","2012","2013",
            "2014","2015","2016","2017","2018","2019","2020","2021","TTM"
        ]
    }
}

# 构建映射并分离TTM
year_value_map = dict(zip(raw_data["data"]["ArrayYears"], raw_data["data"]["ArrayValue"]))
ttm_value = year_value_map.pop("TTM")

# 生成完整序列填充0
full_years = [str(y) for y in range(1988, 2022)]
full_values = [year_value_map.get(y, 0) for y in full_years]

# 还原TTM项
full_years.append("TTM")
full_values.append(ttm_value)

fixed_data = {"data": {"ArrayValue": full_values, "ArrayYears": full_years}}
处理结果校验

补全后1996年至2011年共16个缺失年份的数值全部为0,最终ArrayYears和ArrayValue长度均为35(34个1988-2021连续年度 + 1个TTM项),索引完全对应。

其他编程语言实现逻辑完全一致,不需要依赖第三方库,仅用基础语法即可完成处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 06:09:21