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

Posted

技术标签:

【中文标题】如何通过 Python pandas 读取 json 数组数据【英文标题】:How to read json array data by Python pandas 【发布时间】:2020-07-26 02:55:18 【问题描述】:

我们有一个现有的脚本来从 S3 读取 json 文件并转换成 parquet 格式,接收以下格式的数据并能够通过以下代码读取,

json 文件内容: [ "Id":"123124","Account__c":"0ereeraw334U","Active__c":"true" ]

转换成数据框的现有代码: df = pd.read_json(obj['Body'],dtype='unicode',convert_dates=False)

但是如何以同样的方式读取下面的json数据,

"cust_land_detail":[ "Id":"45634653","Account__c":"sersff23se","Active__c":"true" ]

注意:文件有根元素,因此无法对数据进行编码。

【问题讨论】:

【参考方案1】:

您是否有权访问生成进入 S3 存储桶的数据的任何内容?如果是这样,那么在这方面竭尽全力为自己简化格式可能是有意义的。这也是假设该数据只有一个消费者,或者所有消费者都同意该更改。

我想到的其他选择:

解析为 JSON,使用数组的级别序列化回 - 虽然这很昂贵,因为您最终会解析两次 JSON:s = json.dumps(json.loads(s)["cust_land_detail"])

手动解析出您需要的块——假设结构简单、可知且不太可能改变:preamble, postamble = '""cust_land_detail":', '' s = s[len(preamble):-len(postamble)]

【讨论】:

【参考方案2】:

我通过使用下面的“json_normalize”找到了一个解决方案,

df=pd.read_json(obj['Body'],dtype='unicode',convert_dates=False)
data=json_normalize(df['cust_land_detail'])

我得到两种类型的 JSON 文件,一种是没有根元素的,另一种是有根元素的,所以我需要使用 read_json 读取 json,然后通过根元素与参数传递的根值进行比较来规范化。

【讨论】:

以上是关于如何通过 Python pandas 读取 json 数组数据的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Pandas 从 Excel 中读取某些列 - Python

如何在没有标头信息的 Python 2.7-Pandas 中读取数据

Python中的pandas如何读取excel中指定单元格的值?

python读取csv出错怎么解决

Python Pandas - 读取带有注释标题行的 csv

Python Pandas read_excel dtype str 在读取或通过 to_csv 写入时将 nan 替换为空白 ('')