从Pandas DataFrame的列表内字典提取名称字段的问题
解决Pandas提取列表中字典的name字段问题
问题场景
你的Pandas列producers存储着包含字典的列表,需要提取每个字典中的name值,生成一个存储名称列表的新列,预期结果是将每个子列表里的name字段汇总成新列表。
错误原因分析
你之前遇到的TypeError: string indices must be integers,大概率是因为列中存在混合类型:部分元素是字符串形式的列表(而非实际的Python列表对象),导致代码试图对字符串取索引报错;第二种方法返回全NaN是因为str访问器只对字符串生效,实际列表元素无法通过str[0]获取值。
解决方案
1. 确认并统一数据类型
先检查列中元素的类型,确认是否有字符串混入:
print(df_trimmed['producers'].apply(type).value_counts())
如果输出包含<class 'str'>,说明需要先将字符串解析为实际的列表:
import ast # 将字符串形式的列表转为Python列表对象 df_trimmed['producers'] = df_trimmed['producers'].apply(ast.literal_eval)
2. 提取name字段生成新列
当数据统一为列表类型后,用列表推导式快速提取name:
# 用lambda函数处理:非空列表则提取每个字典的name,空列表返回空列表 df_trimmed['producer_names'] = df_trimmed['producers'].apply( lambda x: [item['name'] for item in x] if x else [] )
或者用自定义函数,逻辑更清晰:
def extract_producer_names(producers_list): if not producers_list: return [] return [prod['name'] for prod in producers_list] df_trimmed['producer_names'] = df_trimmed['producers'].apply(extract_producer_names)
验证结果
处理后的数据会符合预期:
1 [] 2 ['Bandai Visual', 'Notes'] 3 ['Nippon Television Network']
内容的提问来源于stack exchange,提问作者mhutagalung
相关产品推荐
相关产品推荐

