如何规范化Pandas DataFrame中字典列表形式的复杂JSON数据
报错原因
你之前使用ast.literal_eval报错的核心原因是:df['completionDetails']列的元素本身就是Python原生的「字典组成的列表」结构,不是字符串格式的序列化内容,不需要做字符串转字面量的解析操作。
实现步骤
直接逐行遍历列内的事件列表,把嵌套的字段拍平成单层级键值对,再转换为DataFrame即可,代码如下:
import pandas as pd def extract_event_fields(event_list): flat_record = {} for event in event_list: event_type = event["name"] # 匹配预期输出的字段命名规则 flat_record[f"{event_type}_time"] = event["time"] if "location" in event: flat_record[f"{event_type}_location"] = event["location"] return flat_record # 逐行解析后生成目标表 target_df = pd.DataFrame(df["completionDetails"].apply(extract_event_fields).tolist())
如果你的列实际存储的是JSON格式字符串(打印值外层带引号),先执行一步格式转换再走上面的解析逻辑即可:
import json df["completionDetails"] = df["completionDetails"].apply(json.loads)
输出效果
执行后得到的target_df和你预期的格式完全一致:
start_time arrival_time arrival_location departure_time departure_location 0 1654098788177 1654099038368 [-74.2713929, 40.5017297] 1654098843357 [-74.2802414, 40.5095964]
内容的提问来源于stack exchange,提问作者RCN
相关产品推荐
相关产品推荐

