首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将json读取到Pandas dataframe时出现"trailing“错误

将json读取到Pandas dataframe时出现"trailing“错误
EN

Stack Overflow用户
提问于 2021-11-19 21:34:31
回答 1查看 72关注 0票数 0

我有一个Python 3.8.5脚本,它从API获取JSON,保存到磁盘,读取JSON到DF。它起作用了。

代码语言:javascript
复制
df = pd.io.json.read_json('json_file', orient='records')

我想尝试IO buffer,这样我就不必读/写磁盘,但我得到了一个错误。代码如下:

代码语言:javascript
复制
from io import StringIO
io = StringIO()
json_out = []
# some code to append API results to json_out
json.dump(json_out, io)
df = pd.io.json.read_json(io.getvalue())

在最后一行,我得到了错误

代码语言:javascript
复制
  File "C:\Users\chap\Anaconda3\lib\site-packages\pandas\util\_decorators.py", line 199, in wrapper
    return func(*args, **kwargs)

  File "C:\Users\chap\Anaconda3\lib\site-packages\pandas\util\_decorators.py", line 296, in wrapper
    return func(*args, **kwargs)

  File "C:\Users\chap\Anaconda3\lib\site-packages\pandas\io\json\_json.py", line 618, in read_json
    result = json_reader.read()

  File "C:\Users\chap\Anaconda3\lib\site-packages\pandas\io\json\_json.py", line 755, in read
    obj = self._get_object_parser(self.data)

  File "C:\Users\chap\Anaconda3\lib\site-packages\pandas\io\json\_json.py", line 777, in _get_object_parser
    obj = FrameParser(json, **kwargs).parse()

  File "C:\Users\chap\Anaconda3\lib\site-packages\pandas\io\json\_json.py", line 886, in parse
    self._parse_no_numpy()

  File "C:\Users\chap\Anaconda3\lib\site-packages\pandas\io\json\_json.py", line 1119, in _parse_no_numpy
    loads(json, precise_float=self.precise_float), dtype=None

ValueError: Trailing data

JSON采用列表格式。所以这不是实际的json,但当我写到磁盘时,它看起来像这样:

代码语言:javascript
复制
json = [
      {"state": "North Dakota",
        "address": "123 30th st E #206",
        "account": "123"
    },
    {"state": "North Dakota",
        "address": "456 30th st E #206",
        "account": "456"
    }
    ]

考虑到它在第一种情况下(从磁盘写入/读取)有效,我不知道如何进行故障排除。如何解决缓冲区中的问题?实际数据主要是文本,但也有一些数字字段。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-19 21:45:02

不知道你出了什么问题,这对我很有效:

代码语言:javascript
复制
import json
import pandas as pd
from io import StringIO

json_out = [
    {"state": "North Dakota",
     "address": "123 30th st E #206",
     "account": "123"
     },
    {"state": "North Dakota",
     "address": "456 30th st E #206",
     "account": "456"
     }
]

io = StringIO()
json.dump(json_out, io)
df = pd.io.json.read_json(io.getvalue())
print(df)

让我相信追加API数据的代码有问题...

但是,如果您有一个字典列表,则不需要IO步骤。你可以这样做:

代码语言:javascript
复制
pd.DataFrame(json_out)

编辑:当我的json末尾有一个逗号时,我想我记得这个错误,如下所示:

代码语言:javascript
复制
[
  {
    "hello":"world",
  },
]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70041152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档