解析列表中多份JSON并构建DataFrame时遇语法错误求助
解决JSON多字段解析构建DataFrame的语法错误问题
问题场景
你有存储在responselist变量中的4份JSON组成的列表,目标是解析这些数据并构建多列的DataFrame。单字段解析的代码可行,但添加第二个字段时出现语法错误,且数据收集方式不符合多列需求。
错误原因分析
你提供的错误代码存在两个核心问题:
- 语法错误:第一个
data.extend()的生成器表达式未闭合括号,导致Python无法识别代码结构; - 数据结构错误:两次调用
data.extend()会将所有机场名先添加到列表,再添加所有时区,最终data的结构是[机场1, 机场2, ..., 时区1, 时区2, ...],这种一维列表无法直接转换为包含两列的DataFrame(数据长度与列数不匹配)。
正确解决方案
要构建多列DataFrame,需为每个航班数据收集包含多个字段的元素(元组或字典),确保每个元素对应DataFrame的一行。
方案1:逐行提取字段(可读性高)
import pandas as pd # 初始化空列表存储每行数据 data = [] for response in responselist: # 遍历当前response中的所有航班数据 for flight_data in response.get('data', []): # 提取departure节点的字段,默认空字典避免KeyError departure_info = flight_data.get('departure', {}) dep_airport = departure_info.get('airport') dep_timezone = departure_info.get('timezone') # 可按需添加其他字段,比如航班基本信息 flight_date = flight_data.get('flight_date') flight_status = flight_data.get('flight_status') # 将多个字段组成元组,添加到data列表 data.append((dep_airport, dep_timezone, flight_date, flight_status)) # 定义列名 columns = ['departure_airport', 'departure_timezone', 'flight_date', 'flight_status'] # 转换为DataFrame result_df = pd.DataFrame(data, columns=columns)
方案2:生成器表达式简化代码(简洁高效)
import pandas as pd data = [] for response in responselist: # 用生成器表达式批量生成包含多字段的元组 data.extend( ( flight_data.get('departure', {}).get('airport'), flight_data.get('departure', {}).get('timezone'), flight_data.get('flight_date'), flight_data.get('flight_status') ) for flight_data in response.get('data', []) ) columns = ['departure_airport', 'departure_timezone', 'flight_date', 'flight_status'] result_df = pd.DataFrame(data, columns=columns)
扩展说明
- 如果需要解析嵌套更深的字段(比如
arrival、airline节点),只需在元组中添加对应的提取逻辑即可; - 使用
.get(key, default)而非直接索引[],可以避免字段缺失时抛出KeyError,提升代码健壮性。
内容的提问来源于stack exchange,提问作者user11278201
相关产品推荐
相关产品推荐

