【问题标题】:Python dict to DataFrame PandasPython dict 到 DataFrame Pandas
【发布时间】:2015-09-24 20:30:47
【问题描述】:

我需要帮助才能从像这样的dict 获得熊猫DataFrame(2 个级别):

{u'instrument': u'EUR_USD',
 u'candles': [{u'complete': True,
               u'closeMid': 1.26549,
               u'highMid': 1.27026,
               u'lowMid': 1.25006,
               u'volume': 138603,
               u'openMid': 1.26864,
               u'time': u'2014-09-29T21:00:00.000000Z'},
              ...
              {u'complete': True,
               u'closeMid': 1.244995,
               u'highMid': 1.25774,
               u'lowMid': 1.239455,
               u'volume': 167259,
               u'openMid': 1.242075,
               u'time': u'2014-11-10T22:00:00.000000Z'}
              ]
}

列标签和值应为instrumentsCompleteCloseMidHighMidlowMidVolumeOpenMidtime

【问题讨论】:

    标签: python dictionary pandas data-structures


    【解决方案1】:

    这是一个务实的解决方案。

    d = {u'instrument': u'EUR_USD', 
         u'candles': [
            {u'complete': True, u'closeMid': 1.26549, u'highMid': 1.27026, u'lowMid': 1.25006, u'volume': 138603, u'openMid': 1.26864, u'time': u'2014-09-29T21:00:00.000000Z'}, 
            {u'complete': True, u'closeMid': 1.275215, u'highMid': 1.27915, u'lowMid': 1.25838, u'volume': 164677, u'openMid': 1.265485, u'time': u'2014-10-06T21:00:00.000000Z'}, 
            {u'complete': True, u'closeMid': 1.279995, u'highMid': 1.288645, u'lowMid': 1.26249, u'volume': 207189, u'openMid': 1.27537, u'time': u'2014-10-13T21:00:00.000000Z'}, 
            {u'complete': True, u'closeMid': 1.269775, u'highMid': 1.28403, u'lowMid': 1.261385, u'volume': 125266, u'openMid': 1.280145, u'time': u'2014-10-20T21:00:00.000000Z'}, 
            {u'complete': True, u'closeMid': 1.24819, u'highMid': 1.27707, u'lowMid': 1.243775, u'volume': 210030, u'openMid': 1.270125, u'time': u'2014-10-27T21:00:00.000000Z'}, 
            {u'complete': True, u'closeMid': 1.242075, u'highMid': 1.25774, u'lowMid': 1.23582, u'volume': 246530, u'openMid': 1.24841, u'time': u'2014-11-03T22:00:00.000000Z'}, 
            {u'complete': True, u'closeMid': 1.244995, u'highMid': 1.25774, u'lowMid': 1.239455, u'volume': 167259, u'openMid': 1.242075, u'time': u'2014-11-10T22:00:00.000000Z'}
            ]}
    
    df = pd.DataFrame.from_dict(d).join(pd.DataFrame.from_dict(d['candles'])).drop('candles', axis=1)
    df
    

    编辑

    这里的问题完全不同,需要基于相同原理的新答案,但更复杂。

    # Test data
    d = {u'instruments': [
            {u'instrument': u'EUR_USD', 
             u'interestRate': {u'EUR': {u'ask': 0.004, u'bid': 0.1}, 
                               u'USD': {u'ask': 0.004, u'bid':0}}},
            {u'instrument': u'EUR_USD2', 
             u'interestRate': {u'EUR': {u'ask': 0.05, u'bid': 0.2}, 
                               u'USD2': {u'ask': 0.6, u'bid':0.1}}}
        ]}
    
    # Creating an empty DataFrame
    df = DataFrame()
    
    # Iterating over the instruments list
    for item in d['instruments']:
        df = pd.concat([df, pd.DataFrame.from_dict(item)
                        .join(pd.DataFrame.from_dict(item['interestRate'], orient='index'))])
    
    # Performing some cleaning to get back a proper interestRate column   
    df = df.drop('interestRate', axis=1).reset_index().rename(columns={'index':'interestRate'})
    
    print(df)
    
      interestRate instrument  bid       ask
    0          EUR    EUR_USD  0.1  4.00e-03
    1          USD    EUR_USD  0.0  4.00e-03
    2          EUR   EUR_USD2  0.2  5.00e-02
    3         USD2   EUR_USD2  0.1  6.00e-01
    

    【讨论】:

    • 谢谢,非常完美。
    • @DariusCM 太好了,在这种情况下你能接受答案吗?
    • 嗨@Romain X。在这种情况下我该怎么做?:{u'instruments': [{u'instrument': u'EUR_USD', u'interestRate': {u'EUR': {u'ask': 0.004, u'bid': 0}, u'USD': {u'ask': 0.004, u'bid':0}}}]} 我不知道如何将 3-4 级 dict 变量添加到 Dataframe。提前致谢
    • @DariusCM 你好,很抱歉回答晚了(我没有连接)。我刚刚发布了对我的答案的编辑。告诉我它是否有效。
    猜你喜欢
    • 2018-08-11
    • 2021-10-06
    • 2019-08-25
    • 1970-01-01
    • 2021-11-06
    • 2018-06-20
    • 2018-06-09
    • 2021-11-26
    • 1970-01-01
    相关资源
    最近更新 更多