将Python字典转换为数据框

发布于 2021-02-02 23:17:01

我有如下的Python字典:

{u'2012-06-08': 388,
 u'2012-06-09': 388,
 u'2012-06-10': 388,
 u'2012-06-11': 389,
 u'2012-06-12': 389,
 u'2012-06-13': 389,
 u'2012-06-14': 389,
 u'2012-06-15': 389,
 u'2012-06-16': 389,
 u'2012-06-17': 389,
 u'2012-06-18': 390,
 u'2012-06-19': 390,
 u'2012-06-20': 390,
 u'2012-06-21': 390,
 u'2012-06-22': 390,
 u'2012-06-23': 390,
 u'2012-06-24': 390,
 u'2012-06-25': 391,
 u'2012-06-26': 391,
 u'2012-06-27': 391,
 u'2012-06-28': 391,
 u'2012-06-29': 391,
 u'2012-06-30': 391,
 u'2012-07-01': 391,
 u'2012-07-02': 392,
 u'2012-07-03': 392,
 u'2012-07-04': 392,
 u'2012-07-05': 392,
 u'2012-07-06': 392}

键是Unicode日期,值是整数。我想通过将日期及其对应的值作为两个单独的列将其转换为pandas数据框。示例:col1:日期col2:DateValue(日期仍为Unicode,日期值仍为整数)

     Date         DateValue
0    2012-07-01    391
1    2012-07-02    392
2    2012-07-03    392
.    2012-07-04    392
.    ...           ...
.    ...           ...

.
对此方向的任何帮助将不胜感激。我找不到有关熊猫文档的资源来帮助我。

我知道一种解决方案可能是将此dict中的每个键值对转换为dict,以便整个结构成为dict的dict,然后我们可以将每一行分别添加到数据帧中。但我想知道是否有更简单的方法和更直接的方法来执行此操作。

到目前为止,我已经尝试将dict转换为series对象,但这似乎并不维护各列之间的关系:

s  = Series(my_dict,index=my_dict.keys())
关注者
0
被浏览
99
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    将字典的项目传递给DataFrame构造函数,并指定列名称。之后,解析Date列以获取Timestamp值。

    注意python 2.x和3.x之间的区别:

    在python 2.x中:

    df = pd.DataFrame(data.items(), columns=['Date', 'DateValue'])
    df['Date'] = pd.to_datetime(df['Date'])
    

    在Python 3.x中:(需要一个附加的“列表”)

    df = pd.DataFrame(list(data.items()), columns=['Date', 'DateValue'])
    df['Date'] = pd.to_datetime(df['Date'])
    


  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    将字典转换为pandas数据框时,你希望键是该数据框的列,而值是行值,则只需在字典周围放置方括号,如下所示:

    new_dict = {'key 1': 'value 1', 'key 2': 'value 2', 'key 3': 'value 3'}
    
    In[33]:pd.DataFrame([new_dict])
    Out[33]: 
        key 1     key 2     key 3
    0   value 1   value 2   value 3
    

    它免除了我的头疼,所以我希望它可以帮助某个人!



  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。


    这里的错误是因为用标量值调用DataFrame构造函数(它期望值是列表/字典/ …,即具有多个列):

    pd.DataFrame(d)
    ValueError: If using all scalar values, you must must pass an index
    

    你可以从字典中获取项目(即键值对):

    In [11]: pd.DataFrame(d.items())  # or list(d.items()) in python 3
    Out[11]:
                 0    1
    0   2012-07-02  392
    1   2012-07-06  392
    2   2012-06-29  391
    3   2012-06-28  391
    ...
    
    In [12]: pd.DataFrame(d.items(), columns=['Date', 'DateValue'])
    Out[12]:
              Date  DateValue
    0   2012-07-02        392
    1   2012-07-06        392
    2   2012-06-29        391
    

    但是我认为传递Series构造函数更有意义:

    In [21]: s = pd.Series(d, name='DateValue')
    Out[21]:
    2012-06-08    388
    2012-06-09    388
    2012-06-10    388
    
    In [22]: s.index.name = 'Date'
    
    In [23]: s.reset_index()
    Out[23]:
              Date  DateValue
    0   2012-06-08        388
    1   2012-06-09        388
    2   2012-06-10        388
    
知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看