如何将键为元组的嵌套字典转换为指定格式的Pandas DataFrame
问题原因
你的代码只遍历到嵌套字典的第二层(user、id维度),直接把第三层的字典整体作为值存入了Col3字段,没有对元组键和分数值做拆分,因此无法生成w1、w2、score三个独立字段。
解决方法
方法一:直接遍历最内层生成目标结构(推荐)
直接在生成Series时遍历到最内层的单词元组和分数字段,一步生成目标结构:
import pandas as pd user_dict = {'user1': {'id1': {('word1', 'word2'): 0.99, ('word3', 'word4'): 0.16}, 'id2': {('word5', 'word6'): 0.73, ('word7', 'word8'): 0.69}}, 'user2': {'id3': {('word9', 'word10'): 0.59, ('word11', 'word12'): 0.13}, 'id4': {('word13', 'word14'): 0.41, ('word14', 'word15'): 0.74}}} # 三层遍历生成对应维度的Series s = pd.Series({ (user, id_, w1, w2): score for user, id_map in user_dict.items() for id_, word_map in id_map.items() for (w1, w2), score in word_map.items() }).rename_axis(['user', 'id', 'w1', 'w2']).reset_index(name='score') # 如果你需要示例中合并重复user、id值的显示效果,添加以下代码即可(仅修改显示样式,不改变实际存储数据) s = s.set_index(['user', 'id'])
方法二:基于你现有生成的df做二次拆分
如果不想修改原有遍历逻辑,可以对已经生成的带Col3字段的df做后续处理:
# 把Col3的字典转为键值对列表后拆分到多行 df = df.explode('Col3') # 拆分元组得到w1、w2,提取对应分数 df[['w1', 'w2']] = df['Col3'].apply(lambda x: pd.Series(x[0])) df['score'] = df['Col3'].apply(lambda x: x[1]) # 删除冗余的Col3列 df = df.drop('Col3', axis=1)
内容的提问来源于stack exchange,提问作者coding_anon
相关产品推荐
相关产品推荐

