【问题标题】:How to fix ```ValueError: Trailing data``` during ```pandas.read_json(...)```?如何在 ```pandas.read_json(...)` 期间修复 ```ValueError: Trailing data```?
【发布时间】:2020-02-09 06:33:22
【问题描述】:

我正在尝试将 JSON 文件读入 Pandas 数据帧,如下所示:

def read_JSON_into_dataframe( file_name ):
    with sys.stdin if file_name is None else open( file_name, "r", encoding='utf8', errors='ignore' ) as reader:
        df = pd.read_json( reader )
        print( df.describe(), file = sys.stderr )
        return df

但是,我收到一个错误,堆栈帧的底部是:

C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\json\json.py in _parse_no_numpy(self)
    869         if orient == "columns":
    870             self.obj = DataFrame(
--> 871                 loads(json, precise_float=self.precise_float), dtype=None)
    872         elif orient == "split":
    873             decoded = {str(k): v for k, v in compat.iteritems(

ValueError: Trailing data

“尾随数据”指的是什么?如果它引用 JSON 文件中的某个点,我可以做些什么来找出它在哪里以及它有什么问题?

【问题讨论】:

标签: json python-3.x pandas


【解决方案1】:

我做了这样的实验:

  • 获取格式正确的 JSON 文件。
  • 用文本编辑器打开它并在最后的“}”后添加“xxxx”。
  • 尝试读取它,调用 data = json.load(...)

完整的错误信息是:

JSONDecodeError: Extra data: line 112 column 3 (char 6124)

如您所见,您已准确指出在哪一行/哪一列 发现这个多余的文字。

看看你输入文件的这个地方。 可能它以某种方式损坏,例如一些“{”字符是 已删除。

要找到问题的根源,您甚至可以使用 Notepad++。 请注意,如果您将光标放在“{”之前或之后,则 此字符以及结束的“}”显示为红色。 “[”和“]”也是如此。

因此,您可以通过这种方式找到匹配的左/右大括号或方括号 并找出缺少的东西。

当然,json.load 的用法不太可能读取你的文件 作为一个DataFrame,但至少它准确地表明了这个地方 问题发生的地方。 找到错误来源并更正后,再次使用您的程序。

【讨论】:

  • 使用 JSON 验证器 (jsonlint.com) 我发现 JSON 确实存在多种问题,但在 emacs 中很容易修复。一旦我这样做了,read_json 就可以工作了。
【解决方案2】:

df = pd.read_json ("filename.json", lines = True)

【讨论】:

  • 您应该提供有关此解决方案的更多信息。
  • 就我而言,我试图读取 Json Per line 文件并且 df = pd.read_json ("filename.json", lines = True) 解决了这个问题
  • 设置 lines=True 将文件作为每行的 json 对象读取,请参阅 documentation for pandas.read_json
猜你喜欢
  • 2020-10-03
  • 2015-01-30
  • 2021-01-29
  • 2020-04-01
  • 2023-01-23
  • 2021-01-07
  • 2021-10-26
  • 2021-08-13
  • 2020-10-02
相关资源
最近更新 更多