Python Pandas:按字典类型列的字段筛选DataFrame行
解决方法:筛选DataFrame中字典列指定键值的行
你遇到的KeyError是因为直接通过.intent访问Series里的字典键行不通——pandas会把intent当成Series的属性/列名,而不是字典的键。下面给你两种可行的解决办法:
方法1:使用apply直接判断字典值
这是最直接的方式,通过apply遍历topIntent列的每个字典元素,提取intent键并做判断:
# 筛选intent等于指定值的行 filtered_df = my_df[my_df['topIntent'].apply(lambda x: x['intent'] == 'UseCasePaymentArrangement')]
运行后filtered_df就会只保留符合条件的行,也就是你想要的message1那一行。
方法2:先展开字典列为单独字段(更适合后续多字段操作)
如果之后还需要用到score这类字典里的其他字段,推荐先把字典列展开成单独的DataFrame列,再进行筛选:
import pandas as pd # 将topIntent列的字典展开为单独的intent和score列 expanded_df = my_df.join(pd.json_normalize(my_df['topIntent'])) # 筛选intent符合条件的行,同时保留原有的message和topIntent列 filtered_df = expanded_df[expanded_df['intent'] == 'UseCasePaymentArrangement'][['message', 'topIntent']]
这种方式的优势是后续对intent、score的操作会更直观,不用再反复处理字典。
额外提醒:确认字典类型
如果你的topIntent列其实是字符串形式的字典(比如看起来像字典但实际是str类型),需要先把它转换成真正的字典:
import ast # 将字符串字典转为Python字典 my_df['topIntent'] = my_df['topIntent'].apply(ast.literal_eval)
转换完成后再使用上面的筛选方法即可。
内容的提问来源于stack exchange,提问作者Tony Mathew
相关产品推荐
相关产品推荐

