如何用Pandas/Python遍历列表中的字典并适配BigQuery导入
解决嵌套字典列表的字段提取问题
针对你提到的需求,这里提供两种直接可行的Pandas方案,处理后生成的扁平结构可以直接导入BigQuery:
方案1:先拆分列表再提取目标字段(通用场景)
假设你的df1中tags字段的结构类似:
# 示例数据结构 df1 = pd.DataFrame({ "id": [1, 2], "tags": [ [{"group": "group1", "tag1": "v1", "tag2": "v2"}, {"group": "group2", "tag3": "v3"}], [{"group": "group3", "tag4": "v4"}] ] })
执行以下步骤:
- 拆分列表为单行单个字典
# 将tags列表拆分为每行对应一个字典 df_exploded = df1.explode("tags", ignore_index=True)
- 提取group和字典keys
直接从字典对象中提取所需字段,避免格式问题:
# 提取group字段(用get处理缺失key的情况,避免报错) df_exploded["group"] = df_exploded["tags"].apply(lambda d: d.get("group", "")) # 提取字典的所有keys并转为逗号分隔的字符串 df_exploded["tag_keys"] = df_exploded["tags"].apply(lambda d: ",".join(d.keys()))
- 清理并生成最终表
# 移除原tags字段,保留需要的扁平字段 final_df = df_exploded.drop("tags", axis=1)
方案2:展开字典为独立列(需保留所有key对应字段)
如果需要把每个字典的key都作为独立列导入BigQuery,可以用json_normalize完成:
# 拆分列表 df_exploded = df1.explode("tags", ignore_index=True) # 展开嵌套字典为扁平列 df_normalized = pd.json_normalize(df_exploded["tags"]) # 合并原表其他字段(如id)与展开后的列 final_df = pd.concat([df_exploded.drop("tags", axis=1), df_normalized], axis=1)
这种方式会自动将字典的每个key转为列名,值对应填充,空值会用NaN表示,BigQuery可以正常识别。
注意事项
- 如果字典中存在缺失的
group键,用d.get("group", "")替代d["group"]避免KeyError - 若需要对
tag_keys去重或排序,可在join前处理,比如"," .join(sorted(set(d.keys()))) - 最终生成的
final_df是完全扁平的结构,直接用final_df.to_gbq()即可导入BigQuery,无需额外格式转换
内容的提问来源于stack exchange,提问作者user2865459
相关产品推荐
相关产品推荐

