【问题标题】:Combining rows and merging columns of multiple Python dictionaries [duplicate]组合多个Python字典的行和合并列[重复]
【发布时间】:2021-12-19 17:27:33
【问题描述】:

我在 Python 中有三个字典(更实际),我需要将它们“合并行并合并列”到 Pandas 数据框中,尽管 merge 可能不正确在这里术语。我的问题最好通过例子来说明。三个输入字典是:

a = { 'name': name1, 'one': 123, 'two':456, 'three': 789 }
b = { 'name': name2, 'ten': 1230, 'eleven':4560, 'twelve': 7890 }
c = { 'name': name3, 'fifty': 12300, 'sixty':45600, 'seventy': 78900 }

我需要将这些“组合并合并”到字典的输出列表中,如下所示:

       one     two    three   ten     eleven  twelve   fifty   sixty   seventy
name1  123     456    789      0      0       0        0       0       0
name2  0       0      0        1230   4560    7890     0       0       0
name3  0       0      0        0      0       0        12300   45600   78900

是否有任何 Pandas 方法来完成这种“合并和合并”?或者最好的方法是构建一个 python 有序的字典列表并手动管理列?

任意点

【问题讨论】:

    标签: python pandas dataframe dictionary


    【解决方案1】:

    您可以简单地使用pd.DataFrame 构造函数:

    df = pd.DataFrame([a,b,c]).fillna(0)
    
    >>> df
        name    one    two  three  ...  twelve    fifty    sixty  seventy
    0  name1  123.0  456.0  789.0  ...     0.0      0.0      0.0      0.0
    1  name2    0.0    0.0    0.0  ...  7890.0      0.0      0.0      0.0
    2  name3    0.0    0.0    0.0  ...     0.0  12300.0  45600.0  78900.0
    

    【讨论】:

    • 也给出了输入数据,推荐dtype=intkwarg
    • 我认为索引应该是“名称”列。只需重新索引它。
    【解决方案2】:

    你可以使用pd.json_normalize:

    print (pd.json_normalize([a,b,c]).fillna(0))
    
        name    one    two  three     ten  eleven  twelve    fifty    sixty  seventy
    0  name1  123.0  456.0  789.0     0.0     0.0     0.0      0.0      0.0      0.0
    1  name2    0.0    0.0    0.0  1230.0  4560.0  7890.0      0.0      0.0      0.0
    2  name3    0.0    0.0    0.0     0.0     0.0     0.0  12300.0  45600.0  78900.0
    

    【讨论】:

      猜你喜欢
      • 2018-10-16
      • 2017-10-04
      • 1970-01-01
      • 1970-01-01
      • 2012-05-20
      • 2021-11-05
      • 2012-09-12
      • 2020-03-03
      • 2018-11-14
      相关资源
      最近更新 更多