Python 无法将json转换为数据帧

Python 无法将json转换为数据帧,python,json,pandas,csv,dataframe,Python,Json,Pandas,Csv,Dataframe,我正在尝试将一个巨大的JSON文件转换为数据帧,以便对其进行预处理以进行情绪分析,但无法转换 问题出在pd.read_json import json import pandas as pd with open("/content/drive/My Drive/timeline_1.jsonl") as f: data = f.readlines() data_json_str = "[" + ','.join(data) + "]" data_df = pd.read

我正在尝试将一个巨大的JSON文件转换为数据帧,以便对其进行预处理以进行情绪分析,但无法转换

问题出在pd.read_json

import json
import pandas as pd

with open("/content/drive/My Drive/timeline_1.jsonl") as f:
    data = f.readlines()
    data_json_str = "[" + ','.join(data) + "]"
    data_df = pd.read_json(data_json_str)

ValueError:解码“字符串”时出现不匹配的“”

您的数据可能已损坏,至少在一个位置(可能更多)

找到这样一个位置的一种方法是运行代码,而不是在整个文件上运行代码, 但是在它的大块上

例如,在以下设备上运行代码:

  • 你档案的前半部分
  • 下半场
如果任何部件运行正常,则不会出现错误

下一步是对每个“失败”块重复上述过程

另一种方法:仔细查看StackTrace,可能在某个地方 源文件中的行号(不要与行号混淆) Python代码的

现在,您将整个文本组合为一行,因此即使堆栈跟踪 包含这样的数字,很可能只有1

为了简化您的调查,请以这样的方式更改您的代码: 源行位于连接文本中的单独的行中。类似于:

data_json_str = "[" + ',\n'.join(data) + "]"
然后再次执行代码并读取显示的数字(错误发生的位置), 现在等于源行的数目

然后看这一行,纠正它,您的代码应该不会出错

使用源数据在注释后编辑 在您的数据中,我注意到:

  • 它包含两个JSON对象(行)
  • 但是它们之间没有任何逗号
我做了以下补充和更改:

  • 在开头/结尾添加[和]
  • 在第一个{…}后面添加了逗号
因此,输入字符串是:

data_json_str = '''[
{"id": "99014576299056245", "created_at": "2017-11-16T14:28:53.919Z",
 "sensitive": false, "spoiler_text": "", "language": "en",
 "uri": "mastodon.gamedev.place/users/jaggy/statuses/99014576299056245",
 "instance": "mastodon.gamedev.place",
 "content": "<p>Coding a cheeky skill before bed. Not as much as I&apos;d like but had drinks with co-workers after work so shrug ^_^</p>",
 "account_id": "434", "tag_list": [], "media_attachments": [], "emojis": [], "mentions": []},
{"id": "99014544879467317", "created_at": "2017-11-16T14:20:54.462Z", "sensitive": false}
]'''
并获得了一个包含2行的数据帧(无错误)。 起初我怀疑
&apos;
可能是错误源,但我读了json 他也处理过这个案子

但是当我删除第一个{…}后面的逗号时,我得到了错误:

ValueError: Unexpected character found when decoding array value (2)
(你的错误除外)

我使用Python 3.7.0和Pandas 0.25。 如果您有一些较旧版本的Python或Pandas,也许您应该 升级它们

真正的问题可能与JSON中的某些“弱点”有关 解析器(我不确定它是Python还是Pandas的一部分)

升级之前,请执行另一项测试:从中删除提到的
&apos;
输入字符串并再次尝试读取\u json

如果你这次得到一个正确的结果,这将证实我的怀疑 您安装的JSON解析器有缺陷,将成为一个 重要支持我的建议,升级您的软件。

使用: 数据:
  • 在名为
    test.json
[{
“id”:“990145769056245”,
“创建时间”:“2017-11-16T14:28:53.919Z”,
“敏感”:假,
“扰流板_文本”:“,
“语言”:“en”,
“uri”:“mastodon.gamedev.place/users/jaggy/statuses/990114576299056245”,
“实例”:“mastodon.gamedev.place”,
“内容”:“睡前编码一项无礼的技能。没有我想要的那么多,但下班后和同事一起喝酒,所以耸耸肩”,
“帐户id”:“434”,
“标签列表”:[],
“媒体附件”:[],
“表情符号”:[],
“提及”:[]
}, {
“id”:“9901444879467317”,
“创建时间”:“2017-11-16T14:20:54.462Z”,
“敏感”:假,
“扰流板_文本”:“,
“语言”:“en”,
“uri”:“mastodon.gamedev.place/users/jaggy/statuses/9901454879467317”,
“实例”:“mastodon.gamedev.place”,
“内容”:“睡前编码一项无礼的技能。没有我想要的那么多,但下班后和同事一起喝酒,所以耸耸肩”,
“帐户id”:“434”,
“标签列表”:[],
“媒体附件”:[],
“表情符号”:[],
“提及”:[]
}
]
读取数据的代码:
将熊猫作为pd导入
导入json
从pathlib导入路径
从pandas.io.json导入json_规范化
#文件路径
p=Path(r'c:\some\u directory\u与\u data\test.json')
#在中读取文件并使用json模块加载
p.open('r',encoding='utf-8')作为f:
data=json.load(f.read())
#创建一个数据帧
df=json_规范化(数据)
#数据帧视图
id已创建\u敏感扰流板\u文本语言uri实例内容帐户\u id标记\u列表媒体\u附件emojis提及
99014576299056245 2017-11-16T14:28:53.919Z False en mastodon.gamedev.place/users/jaggy/statuses/99014576299056245 mastodon.gamedev.place在睡前编码一项厚颜无耻的技能。没有我想要的那么多,但下班后和同事一起喝酒,所以耸耸肩^

434[] 9901454879467317 2017-11-16T14:20:54.462Z False en mastodon.gamedev.place/users/jaggy/statuses/9901444879467317 mastodon.gamedev.place在睡前编码一项厚颜无耻的技能。没有我喜欢的那么多,但下班后和同事一起喝酒,所以耸耸肩^

434[]
备选案文2: 资料
  • 数据以DICT行的形式存在于文件中
    • 不在名单上
    • 以新行分隔
  • 这不是有效的JSON文件
{“id”:“9901457629056245”,“created_at”:“2017-11-16T14:28:53.919Z”,“sensitive”:false,“spoiler_text”:“language”:“en”,“uri”:“mastodon.gamedev.place/users/jaggy/statuses/990145762299056245”,“instance”:“mastodon.gamedev.place”,“content”:“睡前编写一项厚颜无耻的技能。不如我&apos;
ValueError: Unexpected character found when decoding array value (2)