嵌套JSON转Pandas DataFrame时提取analysis字段内day_text列报错如何解决
解决方法
问题原因
你遇到的报错通常是因为analysis字段的结构和venue_info不同:要么部分行的analysis是空值,要么analysis是列表嵌套字典的结构,而非直接的字典结构,所以直接转DataFrame后找不到对应列。
方案1:使用str.get直接提取(适配字典类型的analysis)
如果analysis每个值都是和venue_info一样的单字典结构,用该方法可以自动兼容空值,不会报错:
# 直接将day_text作为新列加入原DataFrame,空值会自动填充为NaN df_json['day_text'] = df_json['analysis'].str.get('day_text')
方案2:适配列表嵌套字典的analysis结构
如果analysis是[{"day_int": 1, "day_text": "周一"}]这种列表包裹单个字典的结构,先取列表第一个元素再提取即可:
df_json['day_text'] = df_json['analysis'].str[0].str.get('day_text')
通用解决方案:用json_normalize自动展开所有嵌套字段
如果后续还要提取其他嵌套字段,建议读取JSON时直接用pd.json_normalize展开所有层级,避免手动拆字段出错:
# 读取JSON后统一展开所有嵌套结构 raw_data = pd.read_json("C:/Users/IT City/Desktop/Hantz/TripAdvisor-Sanfrancisco/BestTimeData/TripAdvisor-Delivery/1-50-TripAdvisor-Delivery-Final-File.json") df_json = pd.json_normalize(raw_data.to_dict('records')) # 嵌套字段会自动生成为「父字段.子字段」格式的列名,直接取用即可 print(df_json['analysis.day_text'])
内容的提问来源于stack exchange,提问作者Arslan Ahmad Zaheer
相关产品推荐
相关产品推荐

