将Pandas数据帧中的嵌套json/dictionary拆分为单独的列



我有一个问题找不到解决方案,所以请求帮助。

我收到一个DB的导出,它看起来像这样(当然,实际上不止一行(:

"created_at","country","query_success","query_result"
"2022-08-18 08:38:38","Germany",True,"{""servers"": {""windows"": 0, ""linux"": 0}, ""workstations"": {""windows"": 0, ""mac"": 0}}"

我以这种方式将其导入Pandas:

df = pd.read_csv('data.csv', index_col='created_at', parse_dates=True)

它变成了这样:

created_at          country query_success   query_result
2022-08-18 08:38:38 Germany True            {"servers": {"windows": 0, "linux": 0}, "workstations": {"windows": 0, "mac": 0}}

我试图解决的问题是填充query_result列的json/字典。

我想做的是基于这些数据创建并填充四个新列。

server_windows
server_linux
workstation_windows
workstation_mac

我在谷歌上搜索了很多,看到了一些使用ast模块的解决方案,但似乎无法正确使用。这可能是因为它是两个嵌套的字典/json结构?

感谢您的帮助。

尝试:

import json
dfs = pd.concat([pd.json_normalize(json.loads(d)) for d in df["query_result"]])
dfs = pd.DataFrame(dfs.values, columns=dfs.columns, index=df.index)
df = pd.concat([df, dfs], axis=1)
df.pop("query_result")
print(df.to_markdown())

打印:

>服务器.windows>作站.windows权利;">工作站.mac
created_atcountryquery_successservers.linux
2022-08-18 08:38:38

最新更新