使用pandas.read_json时的ValueError

时间:2014-12-02 02:39:09

标签: python json pandas

我制作了一个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是文档。在阅读pandas数据帧时,我得到以下回溯:

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没有用。

8 个答案:

答案 0 :(得分:7)

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

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

这对我有用!

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:1)

就我而言,路径错误。

通过将其放置在pandas.read_json的前面来确保检查您的当前工作目录

import os
print(os.getcwd())

答案 3 :(得分:1)

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

发布此消息是因为上面的答案与我的错误提示不符:当我阅读一个很长的字符串文档(我认为这是有效的json格式,但包含从Python导出到字符串的nan)时,这种情况就发生了有效的json应该为"null"。如果文档不是使用json包创建的,则此错误消息可能会指示错误的值。

答案 6 :(得分:0)

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

答案 7 :(得分:0)

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

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