如何将字典元组转换为有组织的数据框?

时间:2019-12-23 01:16:08

标签: python pandas dataframe dictionary tuples

我正在提取一个API,该API以以下格式检索数据。

     data = ({'2019-12-20': {'SMA': '216.0037'},
              '2019-12-19': {'SMA': '215.4711'},
              '2019-12-18': {'SMA': '214.9335'},
              '2019-12-17': {'SMA': '214.4074'}})

当前,当我尝试运行“ data = pd.DataFrame(data)”时,它将返回一个包含2行的数据框,该行使用每个日期作为一个单独的列,并为每行提供一个字典作为值(以下示例)。

           2019-12-20       |       2019-12-19     |      2019-12-18
 0  "{ 'SMA' : '216.0037' } |  {'SMA': '215.4710"} | {'SMA': '214.9335'}
 1            NaN           |         NaN          |        NaN

我想弄清楚如何按照以下格式将这些数据转换为数据框。

        date     |   SMA
 ----------------------------
 0  '2019-12-20' | '216.0036'
 1  '2019-12-19' | '215.4711'
 2  '2019-12-18' | '214.9335'
 3  '2019-12-17' | '214.4047'

任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:5)

IIUC

pd.DataFrame(data).T.reset_index().rename(columns={'index':'date'})
         date       SMA
0  2019-12-20  216.0037
1  2019-12-19  215.4711
2  2019-12-18  214.9335
3  2019-12-17  214.4074

from_dict

pd.DataFrame.from_dict(data,'index').reset_index().rename(columns={'index':'date'})
                 SMA
2019-12-17  214.4074
2019-12-18  214.9335
2019-12-19  215.4711
2019-12-20  216.0037

答案 1 :(得分:4)

在您的代码中,数据看起来像是一个字典(外括号被忽略了)。

data = ({
    '2019-12-20': {'SMA': '216.0037'},
    '2019-12-19': {'SMA': '215.4711'},
    '2019-12-18': {'SMA': '214.9335'},
    '2019-12-17': {'SMA': '214.4074'}
})
assert isinstance(data, dict)

如果是这种情况,则可以如下生成所需的数据框。

pd.DataFrame(
    [(k, v['SMA']) for k, v in data.items()],
    columns=['date', 'SMA']
)

输出:

         date       SMA
0  2019-12-20  216.0037
1  2019-12-19  215.4711
2  2019-12-18  214.9335
3  2019-12-17  214.4074

答案 2 :(得分:1)

您将可以使用pandas.DataFrame.T

  

通过将行写为列将DataFrame反映在其主要对角线上,反之亦然。属性T是该方法的访问器。

df = pd.DataFrame(data).T.reset_index().rename(columns={'index':'date'})将返回:

         date       SMA
0  2019-12-20  216.0037
1  2019-12-19  215.4711
2  2019-12-18  214.9335
3  2019-12-17  214.4074