将DataFrame转换为字典时丢失记录问题求助
问题分析与解决方案
嘿,我一眼就看出问题所在啦——你的ID列存在大量重复值!
为什么会出现这种情况?
当你用set_index('ID')把ID设为索引后,虽然pandas允许重复索引,但调用to_dict()的时候,字典的键必须是唯一的。这时候后面出现的重复ID会直接覆盖前面的,最后字典里就只剩所有唯一ID对应的记录,刚好是680条,这和你看到的结果完全匹配。
先验证这个猜测
你可以先跑一行代码确认ID的唯一值数量:
print(data['ID'].nunique())
输出肯定是680,实锤这个问题~
两种解决方案,看你的需求选:
1. 同一个ID对应多条评论,想全部保留
如果重复ID是正常业务逻辑(比如同一个电影ID有多条用户评论),那可以把相同ID的评论合并成列表:
# 按ID分组,把每组的Reviews拼成列表,再转成字典 reviews_dict = data.groupby('ID')['Reviews'].apply(list).to_dict() # 此时每个ID对应的是该ID下所有评论的列表,比如 reviews_dict[123] = ["好评", "还行"...]
2. ID重复是数据错误,需要去重
如果ID应该是唯一的,那先清理重复数据再转字典:
# 保留每个ID的第一条记录,或者把keep改成'last'保留最后一条 data_cleaned = data.drop_duplicates(subset='ID', keep='first') # 再转成字典 reviews = data_cleaned.set_index('ID')['Reviews'].to_dict()
补充:原代码的小优化
其实你不需要用.get('Reviews'),直接这样写更简洁:
reviews = data.set_index('ID')['Reviews'].to_dict()
不过核心问题还是ID重复啦~
内容的提问来源于stack exchange,提问作者James Fisher
相关产品推荐
相关产品推荐

