如何通过Pandas合并字典生成仅含title与author_name列的目标DataFrame?
嗨,我来帮你排查问题啦~你之前的代码没得到想要的结果,核心原因是合并时选错了关联列——你用title和author_name来匹配,这俩列的内容完全不搭边,自然匹配不到任何数据啦。
咱们一步步来解决这个问题:
第一步:先把字典转换成Pandas DataFrame
首先得把你手里的两个字典转成DataFrame,这是Pandas操作的基础:
import pandas as pd game_data = { 'game_id': range(1, 6), 'title': ('LOL', 'WH40K', 'WOW', 'POE', 'KEK'), 'author_id': (1, 1, 2, 3, 5), 'genre_id': (1, 2, 4, 4, 1), 'price': (0, 0, 14, 19, 100) } author_data = { 'author_id': (1, 2, 3, 4), 'author_name': ('Graham McNeill', 'Christie Golden', 'Nick Jones', 'Slaik') } # 转换为DataFrame df_game = pd.DataFrame(game_data) df_author = pd.DataFrame(author_data)
第二步:用正确的关联键合并DataFrame
两个表之间的关联键是author_id——游戏数据里的author_id对应作者数据里的author_id,咱们用这个键来做内连接(只保留两边都有匹配的行,这样就能自动过滤掉KEK那个没有对应作者的数据):
# 基于author_id合并,只保留匹配的行 merged_df = pd.merge(df_game, df_author, on='author_id', how='inner')
第三步:筛选出需要的列
合并后的数据会包含所有列,咱们只挑title和author_name这两列就行:
result_df = merged_df[['title', 'author_name']] print(result_df)
运行之后就能得到你想要的结果啦:
title author_name 0 LOL Graham McNeill 1 WH40K Graham McNeill 2 WOW Christie Golden 3 POE Nick Jones
再啰嗦两句为啥之前的代码不行
你之前写的left_on='title', right_on='author_name',相当于让Pandas去匹配“游戏标题”和“作者名字”完全相同的行——比如找有没有叫LOL的作者,显然不存在,所以合并后是空的DataFrame,自然看不到结果啦。以后合并表的时候,一定要找两个表之间有对应关系的共同字段哦~
备注:内容来源于stack exchange,提问作者Nickochka
相关产品推荐
相关产品推荐

