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

Python处理CSV中JSON数据:按指定列提取值缺省补0问题

解决Python提取JSON列指定键值的问题

你的核心问题在于循环逻辑搞反了:你现在是遍历JSON对象的所有键,判断是否在good_columns里,不在就加0——但这完全不符合需求:我们需要的是按照good_columns的顺序,逐个提取对应的值,没有该键就填0,而不是处理JSON里的每一个键。

错误代码的问题分析

原来的代码会导致:

  • 输出顺序是JSON键的顺序,不是good_columns的顺序
  • 把JSON里不在good_columns的键也添加0到data里(比如endpoint_AudioE2ELatency这类键)
  • 完全漏掉good_columns里JSON没有的键(比如第二个JSON里没有inboundrtp_inboundJitter等,这些位置根本没处理)

修正后的代码实现

正确的思路应该是遍历good_columns列表中的每个键,对每个键从JSON对象中取值,没有则返回0,再添加到data里。结合CSV读取的完整流程示例如下:

import csv
import json

good_columns = [ 
    "outboundrtp_roundTripTime", 
    "outboundrtp_targetBitrate", 
    "outboundrtp_bytesSent", 
    "outboundrtp_packetsSent", 
    "outboundrtp_packetsLost", 
    "inboundrtp_inboundJitter" , 
    "inboundrtp_bytesReceived" , 
    "inboundrtp_packetsLost" 
]

data = []

# 假设CSV里存储JSON的列名为"json_column",你需要替换成实际列名
with open('your_file.csv', 'r', encoding='utf-8') as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        # 解析CSV中的JSON字符串为Python字典
        record = json.loads(row['json_column'])
        # 遍历good_columns,逐个提取值,无则填0
        for key in good_columns:
            data.append(record.get(key, 0))

验证示例

拿你提供的第二个JSON对象来说:

{ "endpoint_AudioE2ELatency": 0, "endpoint_VideoE2ELatency": 149, "outboundrtp_roundTripTime": 0, "outboundrtp_targetBitrate": 5616, "outboundrtp_bytesSent": 37366, "outboundrtp_packetsSent": 654, "outboundrtp_packetsLost": 0, "outboundrtp_remb": 0 }

处理后data会添加以下值:
0, 5616, 37366, 654, 0, 0, 0, 0
完全符合预期——缺失的三个inboundrtp相关键都填充了0,顺序也和good_columns一致。

关键知识点

  • 使用dict.get(key, default)方法可以简洁地处理“键不存在则返回默认值”的场景
  • 必须以我们需要的键列表为遍历对象,而不是JSON的键,才能保证顺序和完整性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:44:17