【问题标题】:Turn series of dictionaries into a DataFrame - Pandas将一系列字典转换为 DataFrame - Pandas
【发布时间】:2018-02-02 23:28:52
【问题描述】:

我正在尝试将一系列字典转换为数据框

0      {'neg': 0.0, 'neu': 0.462, 'pos': 0.538}
1      {'neg': 0.0, 'neu': 0.609, 'pos': 0.391}
2      {'neg': 0.043, 'neu': 0.772, 'pos': 0.185}
3      {'neg': 0.035, 'neu': 0.765, 'pos': 0.2}
4      {'neg': 0.0, 'neu': 0.655, 'pos': 0.345}
5      {'neg': 0.0, 'neu': 0.631, 'pos': 0.369}

我希望生成的 DataFrame 让每个键都有自己的列。

neg   neu     pos
0.0.  0.462   0.538
0.0   0.609   0.391
..    ..      ..

如何使用 Pandas 完成此任务?

【问题讨论】:

    标签: python pandas dictionary


    【解决方案1】:

    可能有更好的方法来做到这一点...但是使用您拥有的结构化数据似乎很容易。

    否则看this post改字典

    import pandas as pd
    
    a = [{'neg': 0.0, 'neu': 0.462, 'pos': 0.538},
    {'neg': 0.0, 'neu': 0.609, 'pos': 0.391},
    {'neg': 0.043, 'neu': 0.772, 'pos': 0.185},
    {'neg': 0.035, 'neu': 0.765, 'pos': 0.2},
    {'neg': 0.0, 'neu': 0.655, 'pos': 0.345},
    {'neg': 0.0, 'neu': 0.631, 'pos': 0.369}]
    
    b = dict()
    for key in a[0].keys():
        b[key] = []
        for dic in a:
             b[key].append(dic[key])
    
    pd.DataFrame(b)
    

    【讨论】:

      【解决方案2】:

      鉴于您的系列,ser

      ser
      Out: 
      0      {'neg': 0.0, 'neu': 0.462, 'pos': 0.538}
      1      {'neg': 0.0, 'neu': 0.609, 'pos': 0.391}
      2    {'neg': 0.043, 'neu': 0.772, 'pos': 0.185}
      3      {'neg': 0.035, 'neu': 0.765, 'pos': 0.2}
      4      {'neg': 0.0, 'neu': 0.655, 'pos': 0.345}
      5      {'neg': 0.0, 'neu': 0.631, 'pos': 0.369}
      

      您可以将Series转换为列表并调用DataFrame构造函数:

      pd.DataFrame(ser.tolist())
      Out: 
           neg    neu    pos
      0  0.000  0.462  0.538
      1  0.000  0.609  0.391
      2  0.043  0.772  0.185
      3  0.035  0.765  0.200
      4  0.000  0.655  0.345
      5  0.000  0.631  0.369
      

      或者你可以apply pd.Series 构造函数到每一行。 apply 将灵活并返回一个 DataFrame,因为现在每一行都是一个系列。

      ser.apply(pd.Series)
      Out: 
           neg    neu    pos
      0  0.000  0.462  0.538
      1  0.000  0.609  0.391
      2  0.043  0.772  0.185
      3  0.035  0.765  0.200
      4  0.000  0.655  0.345
      5  0.000  0.631  0.369
      

      【讨论】:

        猜你喜欢
        • 2019-08-15
        • 2014-01-05
        • 2021-11-28
        • 1970-01-01
        • 2017-12-26
        • 2014-12-30
        相关资源
        最近更新 更多