使用 pandas.read_json 时出现 ValueError

Posted

技术标签:

【中文标题】使用 pandas.read_json 时出现 ValueError【英文标题】:ValueError when using pandas.read_json 【发布时间】:2015-01-30 04:50:16 【问题描述】:

我制作了一个 250MB 的 json 文件,应该如下所示:

[ "A":"uniquevalue0", "B":[1,2,3], 
  "A":"uniquevalue1", "B":[1], 
  "A":"uniquevalue2", "B":[1,2,3,4] ]

“B”值可以是变量 len >= 1。This 表示我有有效的 JSON。

我打电话

df = pandas.read_json('ut1.json', orient = 'records', dtype="A":str, "B":list)

Here 是文档。读入熊猫数据框时,我得到以下回溯:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/.../pandas/io/json.py", line 198, in read_json     
    date_unit).parse()
  File "/.../pandas/io/json.py", line 266, in parse 
    self._parse_no_numpy()
  File "/.../pandas/io/json.py", line 496, in _parse_no_numpy
    loads(json, precise_float=self.precise_float), dtype=None)
ValueError: Unexpected character found when decoding 'true'

想不出哪里出了问题。 The python file that is throwing the error 没那么有用。

【问题讨论】:

该代码与给定的 json 文件完美配合。 【参考方案1】:

我有同样的错误信息,我通过使用绝对路径解决了它。

import os
basePath = os.path.dirname(os.path.abspath(__file__))
df = pandas.read_json(basePath + '/ut1.json', orient = 'records', dtype="A":str, "B":list)

这对我有用!

【讨论】:

我试过这样做,但它给了我一个不同的错误:“ValueError:预期的对象或值”。我尝试使用 jsonlint.com 验证 JSON,它说它是一个有效的 json 文件。我不明白这是什么问题。 这很好用。但是尝试使用 os.path.join(basePath, '/ut1.json') 而不是字符串连接。【参考方案2】:

就我而言,路径是错误的。

确保检查您的当前工作目录,将其放在pandas.read_json 之前:

import os
print(os.getcwd())

【讨论】:

【参考方案3】:

在尝试了@learn2day 的答案后,我仍然无法从那里得到一个好的结果,但我确实尝试了以下代码,一切都对我有用。 (PS:我正在打开一个JSON文件,其中出现了汉字是UTF-8字符-汉字)

pandas.read_json(open("ut1.json", "r", encoding="utf8"))

encoding="utf8" 是这段代码的关键部分。

【讨论】:

【参考方案4】:

我遇到了同样的问题,然后意识到问题在于将文本从浏览器复制并粘贴到我的文件中。它引入了回车,以便将给定键的每一行分成多行。这就是问题所在。希望这对某人有帮助!

【讨论】:

【参考方案5】:

对我来说,问题是文件开头有一个 UTF-8 BOM 字符。使用以下编码解决了这个问题:

df = pd.read_json(r'C:\temp\foo.jsonl', lines=True, encoding='utf-8-sig')

【讨论】:

【参考方案6】:

我今天在调用 pandas.read_json('my_file.json') 时收到“值错误:预期的对象或值”。我之前用相同的文件运行过这段代码,所以很担心今天它不能工作。后来不知什么原因发现,json文件不在同一个目录下。然后,我通过右键单击文件链接从 git 下载了文件。那是一个坏主意:(。我猜json文件没有正确编码,所以即使json文件在同一个目录中,我也会不断收到同样的错误。最后,我删除了json文件,克隆了原始文件git repo 获取 json 文件并再次将其放在同一个目录中。然后,这个 pandas.read_json 确实有效。所以,首先请确保 json 文件存在于正确的目录中,然后确保该文件不存在损坏。

【讨论】:

【参考方案7】:

发布这个是因为上面的答案与我的问题不匹配这个错误:它只是在我阅读一个很长的字符串文档时发生,我认为这将是有效的 json 格式但包含nan 作为从 python 导出到字符串而它对于有效的 json,应该是 "null"。如果该文档不是使用 json 包创建的,则此错误消息可能指示错误值。

【讨论】:

【参考方案8】:

我在 linux 上运行代码时遇到了同样的错误。我意识到给 read_csv 的文件名是 .JSON 而不是 .json。将其更改为小写对我有用。

【讨论】:

【参考方案9】:

试试这个

df = pd.read_json('file.jsonl', lines=True) #if its a jsonl file

【讨论】:

以上是关于使用 pandas.read_json 时出现 ValueError的主要内容,如果未能解决你的问题,请参考以下文章

pandas read_json时ValueError: Expected object or value的解决方案

pandas read_json时ValueError: Expected object or value的解决方案

在 Pandas UnicodeDecodeError 中无法使用 pandas.read_json() 解码 JSON 文件中的 Unicode Ascii

如何让 pandas.read_json 将此 API 返回识别为有效的 .json?

如何使用 pandas read_json 读取 ADSB json 数据? [复制]

Pandas.read_json(JSON_URL)