根据键将字典的数据框列转换为新列

时间:2020-07-16 22:11:40

标签: python pandas list dataframe dictionary

我有一个Pandas数据框列,该列由以下几种格式的字典组成:

df[students] = {u'51': [u'1592', u'1582', u'1272', u'459', u'1254', u'1267'], u'32': [u'1659', u'1322', u'1396', u'1315', u'1342', u'1661']} {u'51': [u'1592', u'1582', u'1272', u'459', u'1254', u'1267'], u'32': [u'1659', u'1322', u'1396', u'1315', u'1342', u'1661']} ...等等,以获取更多条目。

每个字典代表数据框中的一个条目。我想将此列转换为2个新列,其中键(51和32)是列标题,并且值分别进入每个列。我使用的df.to_list()Pd.Series()方法起初似乎很有效,但是当我复制它们时,它根本没有改变数据。这里有我想念的东西吗?

3 个答案:

答案 0 :(得分:0)

为什么不这样做:

df['51'], df['32'] = df['col'].apply(lambda x: (x['51'], x['32']))

>>> print(df[['51','32']])
                                     51                                    32
0   (1592, 1582, 1272, 459, 1254, 1267)   (1592, 1582, 1272, 459, 1254, 1267)
1  (1659, 1322, 1396, 1315, 1342, 1661)  (1659, 1322, 1396, 1315, 1342, 1661)

答案 1 :(得分:0)

事实证明,当所讨论的字符串在unicode中时,上述发布的方法不起作用。

这终于奏效了:

df['students'] = df['students'].map(eval)

df2 = pd.concat([df.drop('students', axis=1), pd.DataFrame(df['students'].tolist())], axis=1)

我感谢发布的答案,非常感谢大家。

答案 2 :(得分:0)

这是怎么回事(您可以使用 ANY 个键集来转换 ANY 个词典。如果某个字典中缺少键,则会将NaN分配给该单元格):

from pandas.io.json import json_normalize
df2 = json_normalize(df['students'])

df2:

                                    51                                    32
0  [1592, 1582, 1272, 459, 1254, 1267]  [1659, 1322, 1396, 1315, 1342, 1661]
1  [1592, 1582, 1272, 459, 1254, 1267]  [1659, 1322, 1396, 1315, 1342, 1661]