将dict的pandas dataframe列扩展为dataframe列

时间:2019-01-24 10:12:31

标签: python pandas dictionary dataframe series

我有一个Pandas DataFrame,其中一列是一系列字典,像这样:

     django.template.exceptions.TemplateSyntaxError: 
     Could not parse the remainder: '[peer]['pfs_group']' from 'vpn_data.data[peer]['pfs_group']' 

我希望将dict中的 colA colB colC 0 7 7 {'foo': 185, 'bar': 182, 'baz': 148} 1 2 8 {'foo': 117, 'bar': 103, 'baz': 155} 2 5 10 {'foo': 165, 'bar': 184, 'baz': 170} 3 3 2 {'foo': 121, 'bar': 151, 'baz': 187} 4 5 5 {'foo': 137, 'bar': 199, 'baz': 108} foobar键值对作为我数据框中的列,这样我就得出了这样的结论:

baz

我该怎么做?

1 个答案:

答案 0 :(得分:1)

TL; DR

   colA  colB  foo  bar  baz
0     7     7  185  182  148
1     2     8  117  103  155
2     5    10  165  184  170
3     3     2  121  151  187
4     5     5  137  199  108

详尽的答案

我们首先定义要使用的DataFrame以及导入的熊猫:

df = df.drop('colC', axis=1).join(pd.DataFrame(df.colC.values.tolist()))

import pandas as pd df = pd.DataFrame({'colA': {0: 7, 1: 2, 2: 5, 3: 3, 4: 5}, 'colB': {0: 7, 1: 8, 2: 10, 3: 2, 4: 5}, 'colC': {0: {'foo': 185, 'bar': 182, 'baz': 148}, 1: {'foo': 117, 'bar': 103, 'baz': 155}, 2: {'foo': 165, 'bar': 184, 'baz': 170}, 3: {'foo': 121, 'bar': 151, 'baz': 187}, 4: {'foo': 137, 'bar': 199, 'baz': 108}}}) colC的字典,我们可以通过将每个字典变成pd.Series将其变成pd.DataFrame

pd.Series

给出pd.DataFrame(df.colC.values.tolist()) # df.colC.apply(pd.Series). # this also works, but it is slow

pd.DataFrame

所以我们要做的就是:

  1. foo bar baz 0 154 190 171 1 152 130 164 2 165 125 109 3 153 128 174 4 135 157 188 变成colC
  2. pd.DataFrame删除原始colC
  3. 将转换后的dfcolC一起加入

可以单线完成:

df

现在df = df.drop('colC', axis=1).join(pd.DataFrame(df.colC.values.tolist())) 的内容为df

pd.DataFrame