将带有字典的列的熊猫系列转换为带有字典的列的数据框

时间:2019-10-20 08:15:52

标签: python pandas dataframe

我有一个带有字典的大熊猫系列:

series = pd.Series(
    [[{'id': '1', 'val': 'ab'}, {'id': '2', 'val': 'abc'}], [{'id': '1', 'val': 'aa'}, {'id': '2', 'val': 'ewe'}],
     [{'id': '3', 'val': 'aea'}, {'id': '4', 'val': 'te'}]],
    index=['2014-01-01 22:59:00+00:00', '2014-01-02 22:59:00+00:00', '2014-01-03 21:59:00+00:00'])
2014-01-01 22:59:00+00:00    [{'id': '1', 'val': 'ab'}, {'id': '2', 'val': 'abc'}]
2014-01-02 22:59:00+00:00    [{'id': '1', 'val': 'aa'}, {'id': '2', 'val': 'ewe'}]
2014-01-03 22:59:00+00:00    [{'id': '3', 'val': 'aea'}, {'id': '4', 'val': 'te'}]

我想将其转换为Dataframe,例如:

                           id   val
2014-01-01 22:59:00+00:00   1   ab
2014-01-01 22:59:00+00:00   2   abc
2014-01-02 22:59:00+00:00   1   aa
......

关于如何实施的任何想法? 谢谢

我尝试使用具有不同参数的pandas pd.dataframe方法。

df = pd.DataFrame(series)

2 个答案:

答案 0 :(得分:1)

您的示例是Pandas系列,而不是DataFrame。 因此,创建一个包含两列的数据框,转换每一列并重新加入该数据框。

df = pd.concat([sample.apply(pd.Series)[column].apply(pd.Series) for column in df.columns])
print(df.head())

输出:

                           id   val
2014-01-01 22:59:00+00:00   1   ab
2014-01-02 22:59:00+00:00   1   aa
2014-01-03 21:59:00+00:00   3   aea
2014-01-01 22:59:00+00:00   2   abc
2014-01-02 22:59:00+00:00   2   ewe
2014-01-03 21:59:00+00:00   4   te

答案 1 :(得分:0)

您可以使用explode()方法(Pandas 0.25.0中的新增功能)垂直扩展表格,而使用apply(pd.Series)方法扩展水平表格:

series.explode().apply(pd.Series)

输出:

                          id  val
2014-01-01 22:59:00+00:00  1   ab
2014-01-01 22:59:00+00:00  2  abc
2014-01-02 22:59:00+00:00  1   aa
2014-01-02 22:59:00+00:00  2  ewe
2014-01-03 21:59:00+00:00  3  aea
2014-01-03 21:59:00+00:00  4   te