如何将Pandas DataFrame转换为指定格式的嵌套字典?
将Pandas DataFrame转换为目标嵌套字典的正确方法
首先,先确认你的示例DataFrame可以通过这段代码复现:
import pandas as pd # 生成示例DataFrame df = pd.DataFrame({ 'ScID.xml': { 0: '0006-****(****)050[****:ayfb]2.3.co.xml', 1: '0006-****(****)050[****:smihds]2.3.co.xml', 2: '0006-****(****)050[****:gissad]2.3.co.xml' }, 'topic1': {0: 7.26744186046513e-06, 1: 0.0006479109, 2: 3.413e-06}, 'topic2': {0: 7.26744186046513e-06, 1: 0.0091339857, 2: 3.413e-06}, 'topic3': {0: 7.26744186046513e-06, 1: 2.79485746226941e-06, 2: 3.413e-06} })
你想要的目标嵌套字典格式是这样的:
new_dict = { '0006-****(****)050[****:ayfb]2.3.co.xml': { 'topic1': 0.000007, 'topic2': 0.000007, 'topic3': 0.000007 }, '0006-****(****)050[****:smihds]2.3.co.xml': { 'topic1': 0.000648, 'topic2': 0.009134, 'topic3': 0.000003 }, '0006-****(****)050[****:gissad]2.3.co.xml': { 'topic1': 0.000003, 'topic2': 0.000003, 'topic3': 0.000003 } }
你之前尝试的df.set_index('ScID.xml').T.to_dict()之所以没得到正确结果,是因为T转置后再用默认的to_dict()生成的结构不符合需求——它会把转置后的索引作为外层键,而不是你想要的ScID.xml值。
正确的实现方法
其实只需要去掉转置操作,直接使用to_dict('index')参数即可:
new_dict = df.set_index('ScID.xml').to_dict('index')
方法解释:
df.set_index('ScID.xml'):将ScID.xml列设置为DataFrame的索引,让每一行的索引值成为外层字典的键。.to_dict('index'):这个参数指定转换规则,以DataFrame的索引作为外层字典的键,每一行的列名与对应值组成内层字典,完美匹配你需要的嵌套结构。
如果需要像示例里那样保留6位小数的格式,可以先对数值列做格式化处理:
# 对所有topic列保留6位小数 df[['topic1', 'topic2', 'topic3']] = df[['topic1', 'topic2', 'topic3']].round(6) # 再转换为目标字典 new_dict = df.set_index('ScID.xml').to_dict('index')
这样就能得到和你期望完全一致的嵌套字典啦!
内容的提问来源于stack exchange,提问作者Lorcán
相关产品推荐
相关产品推荐

