如何从Pandas DataFrame内的字典结构中提取目标数据
Pandas 检索DataFrame数据实现方案
不需要手动编写for循环逐行匹配,Pandas原生的布尔索引可以直接完成任意维度的行筛选,写法更简洁、运行效率更高,完全覆盖你需要的查询场景。
1. 按标题精确查询单部动漫信息
直接对title列做等值判断,筛选出符合条件的整行数据,即可拿到作品全部字段,也可以单独提取指定字段内容:
import requests import pandas as pd url = 'https://api.jikan.moe/v4/top/anime' response = requests.get(url) data = response.json() df = pd.DataFrame(data['data']) name = input('请输入要查询的动漫名称: ').strip() # 筛选标题完全匹配的行 match_result = df[df['title'] == name] if not match_result.empty: # 输出作品全部信息 print("查询到的作品完整信息:\n", match_result) # 提取指定字段,比如体裁、评分、上线年份 print("\n作品体裁:", match_result['genres'].values[0]) print("作品评分:", match_result['score'].values[0]) print("上线年份:", match_result['year'].values[0]) else: print("未找到对应名称的动漫作品")
小提示:如果担心输入的前后空格、大小写差异导致匹配失败,可以把判断逻辑统一做格式归一:
df['title'].str.strip().str.lower() == name.strip().lower(),能大幅降低匹配失败概率。
2. 按体裁等其他维度检索内容
Jikan接口返回的genre字段是嵌套字典的列表结构,先做一层格式转换提取体裁名称,就可以按体裁做筛选:
# 预处理体裁列,把嵌套字典转换为纯体裁名称的列表 df['genre_list'] = df['genres'].apply(lambda x: [item['name'] for item in x]) # 筛选所有包含动作(Action)标签的动漫 action_anime = df[df['genre_list'].apply(lambda x: 'Action' in x)] # 只输出需要的列 print(action_anime[['title', 'score', 'year']])
常用检索写法参考
- 标题模糊匹配:记不清完整标题时可做关键词检索,写法为
df[df['title'].str.contains('记忆中的关键词', na=False)] - 多条件组合检索:比如查询2020年后上线、评分高于8.5的作品,多个条件用逻辑运算符连接即可:
df[(df['year'] >= 2020) & (df['score'] >= 8.5)] - 你之前尝试的for循环写法需要手动记录匹配项对应的行索引才能取到整行数据,运行效率低且容易出错,处理DataFrame检索时不推荐使用。
内容的提问来源于stack exchange,提问作者MDP
相关产品推荐
相关产品推荐

