Pandas读取json格式数据

Posted

技术标签:

【中文标题】Pandas读取json格式数据【英文标题】:Pandas read json format data 【发布时间】:2019-08-26 23:01:42 【问题描述】:

我在一个数据框中有一个 json 列。

整个数据框看起来像

“customDimensions”列是json列,数据是这样的

['index': '4', 'value': 'North America']

我想将该列展平为以下 2 列 customDimensions.index、customDimensions.value

我该怎么做?

【问题讨论】:

是否可以添加json格式的数据样本? 如果您要使用嵌套的 JSON 创建数据框,请使用 json_normalize pandas.pydata.org/pandas-docs/stable/reference/api/… 【参考方案1】:

您可以使用列表推导和ast.literal_eval 转换为dict 列表,DataFrame.pop 用于提取列,lastDataFrame.join 用于原始:

#if values are strings
print (type(df.loc[0,'customDimension']))
<class 'str'>

import ast

df1 = (pd.DataFrame([ast.literal_eval(x)[0] for x in df.pop('customDimension')])
         .add_prefix('customDimensions.'))

#if values are lists
print (type(df.loc[0,'customDimension']))
<class 'list'>


df = pd.DataFrame([x[0] for x in df.pop('customDimension')]).add_prefix('customDimensions.')

df = df.join(df1)

如果来源是json,最好使用json.json_normalize

#not tested, depends of json format and data
df = json_normalize(j, 'customDimension', ['channelGrouping','date'])

【讨论】:

你也可以使用 apply。 def getCol(x,col): return x[col] df["customDimensions.index"] = df["customDimensions"].apply(lambda x:getCol(x,"index")) 你太棒了!我的数据是,你的回答完美解决了我的问题!

以上是关于Pandas读取json格式数据的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 Python pandas 读取 json 数组数据

Pandas只提供了读取啥文件的函数?

如何将 pandas 数据框导出为 json 并保留原始日期时间格式?

为 Django 模板中的 Highcharts 从 Pandas 数据帧格式化 JSON

使用 Pandas/Python 获取 Google BigQuery 数据的 JSON 格式

Pandas库的学习