【发布时间】:2019-08-13 12:51:19
【问题描述】:
我有一个 pandas 数据框,其中一列包含存储为字符串的 JSON 列表,我无法尝试将其展平为列。
JSON 列如下所示
[{'id':'item1','xp':'27097','lvl':'26','items':[]},
{'id':'item2','xp':'40650','lvl':'26','items':[]},
{'id':'item3','xp':'33900','lvl':'26','items':['item1', 'item2', 'item3']}]
这里是DF的截图(不能放图片,声望不够)https://i.imgur.com/1YNgXWE.png
json_normalize 在这里不起作用,因为它是嵌套在 pandas 数据帧中的字符串
预期结果:
+-----------+-------+-----+-----+-----------------------------+
| player_id | id | xp | lvl | items |
+-----------+-------+-----+-----+-----------------------------+
| id1 | item1 | 444 | 10 | [] |
| id1 | item2 | 12 | 77 | [] |
| id1 | item3 | 15 | 20 | ['item1', 'item2', 'item3'] |
+-----------+-------+-----+-----+-----------------------------+
对于每个 id,我想将此列表展平为列并获取列表 if 项及其参数。
以下代码适用于单个 JSON,不适用于列表:
df = (pd.DataFrame([ast.literal_eval(x)[0] for x in original_df.pop('items')])
.add_prefix('items.'))
【问题讨论】:
-
不要链接到
DF的屏幕截图,而是粘贴DF的一些示例数据 -
您原来的
player_idDataFrame 是如何格式化的?上面的列表长度是否与 DataFrame 的长度相同? -
是的,IMCoins,原始数据集具有唯一 ID,没有重复。
-
你的问题解决了吗?
-
您好,很抱歉回复晚了!是的,它有帮助,但我不得不修改解决方案,因为带有 JSON 的单元格包含 JSON 列表(在原始帖子中)。非常感谢您的时间和帮助