如何在 ```pandas.read_json(...)` 期间修复 ```ValueError: Trailing data```?

Posted

技术标签:

【中文标题】如何在 ```pandas.read_json(...)` 期间修复 ```ValueError: Trailing data```?【英文标题】:How to fix ```ValueError: Trailing data``` during ```pandas.read_json(...)```? 【发布时间】: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 验证器? duckduckgo.com/?q=json+validator&atb=v168-1&ia=answer 【参考方案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

以上是关于如何在 ```pandas.read_json(...)` 期间修复 ```ValueError: Trailing data```?的主要内容,如果未能解决你的问题,请参考以下文章

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

在 pandas 中使用 read_json 导入单个记录

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

Pandas.read_json(JSON_URL)

使用 pandas.read_json 时出现 ValueError

使用 pandas read_json 导入文件时遇到问题