从 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_path
和meta
参数。
【参考方案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的主要内容,如果未能解决你的问题,请参考以下文章