【问题标题】:dictionary with tuple into a dataframe带有元组的字典到数据框中
【发布时间】:2017-06-16 02:41:08
【问题描述】:

我有一个 python 字典,其中键作为日期,值作为元组,如下所示。

dct = {'01/24/2017 01:10:23.1230':('a',12),
        '12/25/2016 10:12:45.128':('b',23),
        '11/16/2016 09:39:55.459':('c',45),
        '01/12/2017 15:55:20.783':('d',34)}

想要将其写入具有常量(用户 ID)的 Dataframe,如下所示。

   userid   Date                            value1                value2
0  123     '01/24/2017 01:10:23.1230'        a                     12
1  123     '12/25/2016 10:12:45.128'         b                     23
2  123     '11/16/2016 09:39:55.459'         c                     45
3  123     '01/12/2017 15:55:20.783'         d                     34

尝试将字典转换为列表或 numpy 数组以写入 Dataframe,但字典中的元组,我无法将它们分开。有什么想法吗?

【问题讨论】:

    标签: python pandas numpy dictionary dataframe


    【解决方案1】:

    如果需要选择新列的位置,您可以使用DataFrame.from_dictDataFrame.insert

    d = {'01/24/2017 01:10:23.1230':('a',12),'12/25/2016 10:12:45.128':('b',23),'11/16/2016 09:39:55.459':('c',45),'01/12/2017 15:55:20.783':('d',34)}
    
    df = pd.DataFrame.from_dict(d, orient='index').reset_index()
    df.columns = ['Date','value1','value2']
    df.insert(0, 'userid', 123)
    print (df)
       userid                      Date value1  value2
    0     123  01/24/2017 01:10:23.1230      a      12
    1     123   12/25/2016 10:12:45.128      b      23
    2     123   01/12/2017 15:55:20.783      d      34
    3     123   11/16/2016 09:39:55.459      c      45
    

    如果需要在DataFrame末尾添加新列:

    df['userid'] = 123
    print (df)
                           Date value1  value2  userid
    0  01/24/2017 01:10:23.1230      a      12     123
    1   12/25/2016 10:12:45.128      b      23     123
    2   01/12/2017 15:55:20.783      d      34     123
    3   11/16/2016 09:39:55.459      c      45     123
    

    或者assign的解决方案:

    df = df.assign(userid=123)
    print (df)
                           Date value1  value2  userid
    0  01/24/2017 01:10:23.1230      a      12     123
    1   12/25/2016 10:12:45.128      b      23     123
    2   01/12/2017 15:55:20.783      d      34     123
    3   11/16/2016 09:39:55.459      c      45     123
    

    通过评论编辑:

    使用dict comprehension 添加新值123

    d1 = {k:(123, v[0], v[1]) for k,v in d.items()}
    print (d1)
    {'01/24/2017 01:10:23.1230': (123, 'a', 12), 
    '11/16/2016 09:39:55.459': (123, 'c', 45), 
    '01/12/2017 15:55:20.783': (123, 'd', 34), 
    '12/25/2016 10:12:45.128': (123, 'b', 23)}
    
    df = pd.DataFrame.from_dict(d1, orient='index').reset_index()
    df.columns = ['Date','userid','value1','value2']
    print (df)
                           Date  userid value1  value2
    0  01/24/2017 01:10:23.1230     123      a      12
    1   11/16/2016 09:39:55.459     123      c      45
    2   01/12/2017 15:55:20.783     123      d      34
    3   12/25/2016 10:12:45.128     123      b      23
    

    【讨论】:

    • 非常感谢。无论如何将用户ID添加到字典然后创建DataFrame?
    【解决方案2】:

    类似这样的:

    pd.DataFrame(data=dct).T.reset_index()
    Out[13]: 
                          index  0   1
    0   01/12/2017 15:55:20.783  d  34
    1  01/24/2017 01:10:23.1230  a  12
    2   11/16/2016 09:39:55.459  c  45
    3   12/25/2016 10:12:45.128  b  23
    

    PS:不要使用 dict 作为变量名,否则你将取代 dict 类。

    【讨论】:

      猜你喜欢
      • 2018-08-10
      • 1970-01-01
      • 2019-04-24
      • 1970-01-01
      • 1970-01-01
      • 2020-03-21
      • 2021-09-01
      • 2018-04-25
      • 2021-12-29
      相关资源
      最近更新 更多