从 DataFrame 列展开 JSON

Posted

技术标签:

【中文标题】从 DataFrame 列展开 JSON【英文标题】:Expand JSON from DataFrame column 【发布时间】:2018-05-19 05:10:21 【问题描述】:

我想扩展 DataFrame 中的 JSON 数据,使每个 KV 对具有单独的列。

                                                events
0     u'category': u'8052', u'username': u'NULL', u...
1     u'category': u'8052', u'username': u'NULL', u...
2     u'category': u'8052', u'username': u'NULL', u...
3     u'category': u'8052', u'username': u'NULL', u...

我用map 尝试了很多东西,但都没有成功。主要是因为函数需要字符串。

在相关说明中,我从 Python (2.7) 请求的单个列中获取 JSON。回复有 JSON 数据,我读了。

从函数:

results = requests.get(api_url + "/" + search_id + '/results',
                                  headers=aheaders, verify=False, auth=bauth).text.decode('utf-8')
return json.loads(results)

从实际调用来看:

results = pd.DataFrame.from_dict(
            ariel_query(server_ip, usern, passw, token)
)

由于扩展列似乎相当复杂,因此可能有更简单的方法。

【问题讨论】:

尝试使用json_normalize pandas.pydata.org/pandas-docs/stable/generated/… 这会将所有内容放在一行中,而不是一列。 ` 事件 0 [u'category': u'8052', u'username': u'NULL', ...` 您必须解决record_pathmeta 参数。 【参考方案1】:

我使用了json_normalize 和一个名为record_path 的参数。正如您在清单中看到的,该列称为事件,它是补充值。然后json_normalize 将返回带有列的DataFrame

results = json_normalize(
        requests.get(qradar_api_url + "/" + search_id + '/results',
                                  headers=aheaders, verify=False, auth=bauth).json(), record_path=keyword)

这适用于 Python 2.7(3.x 的请求略有不同)

【讨论】:

以上是关于从 DataFrame 列展开 JSON的主要内容,如果未能解决你的问题,请参考以下文章

使用 JSON 对象展开 Pandas DataFrame 列

如何将嵌套的Struct列展开为多列?

如何展开 DataFrame 中的数组(来自 JSON)?

pandas 如何将一列列表数据展开成多行数据

pandas从dataframe中删除一个或多个数据列

从两个 DataFrame 列构建字典 [重复]