如何用熊猫读取 json 文件?

Posted

技术标签:

【中文标题】如何用熊猫读取 json 文件?【英文标题】:how to read json file with pandas? 【发布时间】:2016-12-26 16:28:03 【问题描述】:

我已经用 scrapy 抓取了一个网站并将数据存储在一个 json 文件中。 json文件链接:https://drive.google.com/file/d/0B6JCr_BzSFMHLURsTGdORmlPX0E/view?usp=sharing

但是 json 不是标准的 json 并且会报错:

>>> import json
>>> with open("/root/code/itjuzi/itjuzi/investorinfo.json") as file:
...     data = json.load(file)
... 
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
  File "/root/anaconda2/lib/python2.7/json/__init__.py", line 291, in load
**kw)
  File "/root/anaconda2/lib/python2.7/json/__init__.py", line 339, in loads
    return _default_decoder.decode(s)
  File "/root/anaconda2/lib/python2.7/json/decoder.py", line 367, in decode
    raise ValueError(errmsg("Extra data", s, end, len(s)))
ValueError: Extra data: line 3 column 2 - line 3697 column 2 (char 45 - 3661517)

然后我尝试了这个:

with open('/root/code/itjuzi/itjuzi/investorinfo.json','rb') as f:
     data = f.readlines()
data = map(lambda x: x.decode('unicode_escape'), data)
>>> df = pd.DataFrame(data)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'pd' is not defined
>>> import pandas as pd
>>> df = pd.DataFrame(data)
>>> print pd
<module 'pandas' from '/root/anaconda2/lib/python2.7/site-packages/pandas/__init__.pyc'>
>>> print df
[3697 rows x 1 columns]

为什么只返回 1 列?

如何标准化json文件并用pandas正确读取?

【问题讨论】:

使用我从获取 json 中添加的最后一个代码来提取值,如果有效则接受 @SerialDev 我不知道为什么,但同样的错误......太伤心了。我可以用“with open('/root/code/itjuzi/itjuzi/investorinfo.json','rb') as f: data = f.readlines() data = map(lambda x: x.decode ('unicode_escape'), data)" 但只有一列 【参考方案1】:

试试这个:

import json
with open('data.json') as data_file:    
data = json.load(data_file)

这样做的好处是可以很好地处理不适合内存的大型 JSON 文件

编辑: 您的数据不是有效的 JSON。 删除前3行中的以下内容,它将验证:

[
    "website": ["\u5341\u65b9\u521b\u6295"]
]

EDIT2[因为您需要从 json 访问嵌套值]:

您现在还可以像这样访问单个值:

data["one"][0]["id"]  # will return 'value'
data["two"]["id"]    # will return 'value'
data["three"]      # will return 'value'

【讨论】:

ValueError:期望对象:第 1 行第 2 列(字符 1) 文件不是有效的 JSON JSONDecodeError: Extra data: line 3 column 2 (char 45) "ValueError: Expecting object: line 1 column 510 (char 509)" 对我来说仍然是同样的错误 您在 ] 之后删除了 [(您的 json 文件应该以 [ 现在而不是 开头,我相信它会像我刚刚验证的那样工作 是的。你是对的。我只是把'['放在后面。并且发生了同样的错误。【参考方案2】:

试试下面的代码:(你少了一个东西)

>>> import json
>>> with open("/root/code/itjuzi/itjuzi/investorinfo.json") as file:
 ...     data = json.load(file.read())

【讨论】:

我不知道你为什么会出现这个错误。文件不是字符串。

以上是关于如何用熊猫读取 json 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何用jquery读取json文件里面的数值并且修改保存

如何用python读取json文件里指定的数据

如何用python读取json里面的值啊

如何用 Newman 读取两个文件夹

熊猫读取 json 不适用于 MultiIndex

如何用java程序读取带密码(密码已知)的office文档。