我有一个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()
方法起初似乎很有效,但是当我复制它们时,它根本没有改变数据。这里有我想念的东西吗?
答案 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]