首页 > 解决方案 > 如何将一行中的字典列表拆分为多行 Pandas DataFrame?

问题描述

我有以下数据框:

            terms                                          periods
0      [741880, 3764106]            [{"name":"2010 год", "date":"31.12.2010", "value":"6621"},{"name":"2000 год", "date":"31.12.2000", "value":"17913"},{"name":"2006 год", "date":"31.12.2006", "value":"5849"},{"name":"2003 год", "date":"31.12.2003", "value":"9211"},{"name":"2012 год", "date":"31.12.2012", "value":"7647"},{"name":"2011 год", "date":"31.12.2011", "value":"8382"},{"name":"2014 год", "date":"31.12.2014", "value":"7388"},{"name":"2004 год", "date":"31.12.2004", "value":"8851"}]

如您所见,它在行中有一个字典列表。现在我想要类似的东西:

terms                                          date          value
0      [741880, 3764106]                     31.12.2010       6621
1      [741880, 3764106]                     31.12.2000       17913
2      [741880, 3764106]                     31.12.2006       5849

etc

因此,字典列表必须根据列表中元素的数量分成几行。

我怎样才能做到这一点?

标签: pythonpandasdataframe

解决方案


尝试使用apply()explode()

df2 = (df['periods'].apply(lambda x: [[i['date'],i['value']] for i in x])
       .explode()
       .apply(pd.Series, index=['date','value'])])
df = pd.concat([df['terms'], df2, axis=1).reset_index(drop=True)

输出:

print(df)
              terms            date    value
  0     [741880, 3764106]   31.12.2010  6621
  1     [741880, 3764106]   31.12.2000  17913
  2     [741880, 3764106]   31.12.2006  5849
  3     [741880, 3764106]   31.12.2003  9211
  4     [741880, 3764106]   31.12.2012  7647
  5     [741880, 3764106]   31.12.2011  8382
  6     [741880, 3764106]   31.12.2014  7388
  7     [741880, 3764106]   31.12.2004  8851

推荐阅读