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
相关产品推荐
相关产品推荐

