Python 无法将json转换为数据帧
我正在尝试将一个巨大的JSON文件转换为数据帧,以便对其进行预处理以进行情绪分析,但无法转换 问题出在pd.read_jsonPython 无法将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
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:解码“字符串”时出现不匹配的“”您的数据可能已损坏,至少在一个位置(可能更多) 找到这样一个位置的一种方法是运行代码,而不是在整个文件上运行代码, 但是在它的大块上 例如,在以下设备上运行代码:
- 你档案的前半部分
- 下半场
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'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)