我有一个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}
,foo
和bar
键值对作为我数据框中的列,这样我就得出了这样的结论:
baz
我该怎么做?
答案 0 :(得分:1)
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
所以我们要做的就是:
foo bar baz
0 154 190 171
1 152 130 164
2 165 125 109
3 153 128 174
4 135 157 188
变成colC
pd.DataFrame
删除原始colC
df
与colC
一起加入可以单线完成:
df
现在df = df.drop('colC', axis=1).join(pd.DataFrame(df.colC.values.tolist()))
的内容为df
:
pd.DataFrame