【问题标题】:Pandas Datarame to dictPandas Dataframe 到 dict
【发布时间】:2018-08-11 03:12:29
【问题描述】:

我有一个数据框:

pd.DataFrame([[1,2,3],[111,222,333]], columns=['A', 'B', 'C'])

     A    B    C
0    1    2    3
1  111  222  333
2   11   22   33

我需要将 A 和 C 中的每一行转换为字典。
我应该能够得到这个:

{'1':'3',
 '111':'333',
 '11':'33'}

到目前为止,我还没有找到如何选择应该包含哪些列以及如何不包含标题

【问题讨论】:

    标签: python pandas dictionary


    【解决方案1】:

    来自zip

    dict(zip(df.A,df.C))
    Out[1073]: {1: 3, 11: 33, 111: 333}
    

    更新

    from collections import defaultdict
    d = defaultdict(dict)
    for _,x in df.iterrows():
        d[x['A']][x['B']] = x['C']
    
    
    d
    Out[74]: defaultdict(dict, {1: {2: 3}, 11: {22: 33}, 111: {222: 333}})
    

    【讨论】:

    • @AnonX aha , yw~ :-) 快乐编码
    • 很抱歉再次打扰您。目前我有 {A:C},但有没有办法生成 {A:{B:C}}?
    • @AnonX 这不是兄弟,:-),更新,你需要嵌套字典 :-)
    • 谢谢! :) 以及如何删除“defaultdict(dict”和“)”,所以我只剩下原始的dict了?编辑:哦..哈哈..“dict(d)”就是这么简单^^谢谢!
    • @AnonX yw~ :-) 快乐编码
    【解决方案2】:

    谢谢各位!以防万一有人想知道优化的区别:

    %%timeit
    d1 = df.set_index('A')['C'].to_dict()
    
    [Out]: 2.46 ms ± 11.3 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
    


    %%timeit
    d2 = dict(zip(df['A'],df['C']))
    
    [Out]: 1.23 ms ± 12.4 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
    

    【讨论】:

      【解决方案3】:

      这是一种方式:

      d = df.set_index('A')['C'].to_dict()
      

      【讨论】:

      • 完美!谢谢!
      猜你喜欢
      • 2021-10-06
      • 1970-01-01
      • 2019-08-25
      • 1970-01-01
      • 2018-06-20
      • 2018-06-09
      • 2021-11-26
      • 1970-01-01
      • 2017-01-28
      相关资源
      最近更新 更多