Pandas Series 写入和读取 json 数据会产生带有 to_json 和 read_json 的 ValueError [重复]

Posted

技术标签:

【中文标题】Pandas Series 写入和读取 json 数据会产生带有 to_json 和 read_json 的 ValueError [重复]【英文标题】:Pandas Series writing and reading json data gives ValueError with to_json and read_json [duplicate] 【发布时间】:2018-10-10 19:54:35 【问题描述】:

当使用 to_json 从 pandas.Series 对象向 json 写入数据,然后使用 pandas.read_json 读取该数据时,我收到以下 ValueError

import pandas as pd
js = pd.Series([1, 2, 3], index=list('abc')).to_json()
js
# out: '"a":1,"b":2,"c":3'

pd.read_json(js)
# Traceback ... 
# ValueError: If using all scalar values, you must pass an index

显然因为 json 数据只包含 index:value 对,read_json 函数不知道将键解释为索引。

我还尝试了基于docs 的以下orient 选项,这导致了不同的ValueError

js = pd.Series([1, 2, 3], index=list('abc'), name='mydata').to_json(orient='split')
js
# out: '"name":"mydata","index":["a","b","c"],"data":[1,2,3]'
pd.read_json(js, orient='split')
# Traceback ... 
# ValueError: JSON data had unexpected key(s): name

我的问题是:如何配置 Series.to_json 以与 pd.read_json 兼容?这是改进系列默认 json 写入/读取行为的错误/机会吗?

感谢您的帮助!

【问题讨论】:

【参考方案1】:

简单修复,使用typ 参数:

pd.read_json(js, typ='series')

a    1
b    2
c    3
dtype: int64

它是“typ”而不是“type”,以免与 type 内置函数混淆!

【讨论】:

以上是关于Pandas Series 写入和读取 json 数据会产生带有 to_json 和 read_json 的 ValueError [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Pandas读写文件操作

Python数据挖掘Pandas

使用 Pandas .to_sql 将 JSON 列写入 Postgres

往返于 json 的 Pandas 时间戳

pandas写入csv文件时,如果该文件已存在

Python 如何把json数据写入excel