如何用Python展开DataFrame中crew列的嵌套字典列表?
解决CSV中嵌套列表字典列的展开问题
你的crew列存储的是字符串形式的Python列表字典,而非原生可迭代对象,这是无法直接展开的核心原因。以下是完整的Python处理方案:
步骤1:导入依赖库
import pandas as pd import ast
步骤2:读取并解析字符串列
先读取CSV文件,再将字符串格式的列表转换为真实的Python对象:
# 读取CSV文件 df_credits = pd.read_csv('credits.csv') # 解析字符串为Python列表(处理外层双引号+安全解析字面量) def parse_crew_data(crew_str): try: # 移除首尾双引号,再用ast解析(避免eval的安全风险) return ast.literal_eval(crew_str.strip('"')) except Exception: # 解析失败时返回空列表,防止流程中断 return [] df_credits['crew'] = df_credits['crew'].apply(parse_crew_data)
选用
ast.literal_eval而非eval的原因:前者专门处理Python字面量(列表、字典、None等),安全性更高,不会执行潜在的恶意代码。
步骤3:展开嵌套数据
先将列表拆分为单独行,再将字典展开为独立字段:
# 展开列表,每个crew成员占一行 df_exploded = df_credits.explode('crew', ignore_index=True) # 将字典列展开为独立列 df_crew_details = pd.json_normalize(df_exploded['crew']) # 合并原表的id与展开后的crew信息 final_df = pd.concat([df_exploded[['id']], df_crew_details], axis=1)
最终效果
处理后的数据会将原表的每个id与对应的crew成员信息一一映射,示例输出结构如下:
| id | credit_id | department | gender | id | job | name | profile_path |
|---|---|---|---|---|---|---|---|
| 原id | 52fe44dac3a36847f80adfa3 | Camera | 2 | 2702 | Director of Photography | John Seale | /w4wp04pRMqJI2vt3gFTdIWLDDzp.jpg |
| 原id | 52fe44dac3a36847f80adf8b | Directing | 2 | 3026 | Director | Rob Reiner | /2zw9Iq9uo4vZiTQNQWdNFwbA1TA.jpg |
内容的提问来源于stack exchange,提问作者Jorge Gomez
相关产品推荐
相关产品推荐

