如何提取Pandas DataFrame中列表嵌套字典字段的pluralName值
问题解答
报错原因
你编写的循环逻辑存在错误:
执行category_names = df['venue.categories'].values.tolist()后,category_names是嵌套列表结构,每个元素对应原DataFrame单行的venue.categories值(即你示例中包含字典的列表)。
当你使用for x in category_names遍历列表时,x本身就是每一行的列表元素,而非列表的整数索引,此时再写category_names[x]相当于用列表类型的值作为索引取值,自然触发TypeError: list indices must be integers or slices, not list报错。
解决方法
方法1:修改原有循环逻辑
直接使用遍历得到的x取值即可,无需二次索引category_names:
category_names = df['venue.categories'].values.tolist() names = [] for x in category_names: n = x[0]['pluralName'] names.append(n)
如果存在部分行venue.categories为空、或者缺少pluralName键的情况,可以增加兼容判断避免报错:
category_names = df['venue.categories'].values.tolist() names = [] for x in category_names: if x: n = x[0].get('pluralName', '') names.append(n) else: names.append('')
方法2:更简洁的Pandas向量化写法
无需转换列表遍历,直接用apply方法处理列即可,代码更精简:
# 提取结果为列表 names = df['venue.categories'].apply(lambda x: x[0].get('pluralName', '') if x else '').tolist() # 也可以直接存为DataFrame新列 df['category_plural_name'] = df['venue.categories'].apply(lambda x: x[0].get('pluralName', '') if x else '')
内容的提问来源于stack exchange,提问作者Brandon Bednar
相关产品推荐
相关产品推荐

