如何处理IMDB数据集geners列的类JSON格式数据并提取可用字段?
提取IMDB数据集genres列中的name字段到新列
针对你遇到的genres列是类JSON格式的情况,用Python的pandas结合ast模块就能轻松处理,分两种场景给出解决方案:
场景1:genres列已经是Python列表/字典对象
如果你的数据集读入后,genres列本身就是Python的列表(每个元素是包含id和name的字典),直接用apply遍历提取name字段即可:
import pandas as pd # 假设你的数据集存储在df变量中 df['genre_names'] = df['genres'].apply(lambda x: ', '.join([item['name'] for item in x]))
如果只需要提取第一个分类的name,可以改成:
df['first_genre'] = df['genres'].apply(lambda x: x[0]['name'] if x else None)
(加if x else None是为了处理空列表的情况,避免报错)
场景2:genres列是字符串格式的类JSON
如果genres列存储的是字符串(比如"[{'id': 35, 'name': 'Comedy'}]"这种形式),需要先把字符串转换成Python对象,这里推荐用ast.literal_eval(比eval安全,不会执行恶意代码):
import pandas as pd import ast # 先将字符串转成Python列表 df['genres'] = df['genres'].apply(ast.literal_eval) # 再提取name字段到新列 df['genre_names'] = df['genres'].apply(lambda x: ', '.join([item['name'] for item in x]))
效果示例
处理前的genres列:
[{'id': 35, 'name': 'Comedy'}]
[{'id': 18, 'name': 'Drama'}, {'id': 28, 'name': 'Action'}]
处理后的genre_names列:
Comedy
Drama, Action
内容的提问来源于stack exchange,提问作者int_x
相关产品推荐
相关产品推荐

