【发布时间】:2017-02-15 09:02:13
【问题描述】:
我有一个从数据库加载数据的数据框df。大多数列是 json 字符串,而有些甚至是 json 列表。例如:
id name columnA columnB
1 John {"dist": "600", "time": "0:12.10"} [{"pos": "1st", "value": "500"},{"pos": "2nd", "value": "300"},{"pos": "3rd", "value": "200"}, {"pos": "total", "value": "1000"}]
2 Mike {"dist": "600"} [{"pos": "1st", "value": "500"},{"pos": "2nd", "value": "300"},{"pos": "total", "value": "800"}]
...
如您所见,并非所有行在列的 json 字符串中都具有相同数量的元素。
我需要做的是保持id 和name 等普通列不变,并像这样展平json 列:
id name columnA.dist columnA.time columnB.pos.1st columnB.pos.2nd columnB.pos.3rd columnB.pos.total
1 John 600 0:12.10 500 300 200 1000
2 Mark 600 NaN 500 300 Nan 800
我试过像这样使用json_normalize:
from pandas.io.json import json_normalize
json_normalize(df)
但keyerror 似乎存在一些问题。这样做的正确方法是什么?
【问题讨论】:
-
B 列中的值呢?你也想扁平化字典吗?
-
是的。它们也需要展平。原始问题中有一个错字,我将 columnA 用于所有展平的列,但现在更正了。
标签: python json pandas dataframe flatten