- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在工作一组 code exercises使用 Yelp reviews dataset 。此时,在练习中,我应该阅读 review.json,其中每行有一个 JSON 记录。我制作了一个较小版本的 JSON 文件,只有 100 条记录,用于测试。
我可以将整个测试文件读入 pandas 数据帧并检查它。
但是,完整的数据集文件大约有 600 万行。建议使用 chunksize 并构建一个 json 读取器。即使使用我的测试输入,我也会遇到错误。
我的代码目前看起来像这样
path = 'file://localhost/Users/.../DSC_Intro/'
filename = path + 'yelp_dataset/review_100.json'
# create a reader to read in chunks
review_reader =
pd.read_json(StringIO(filename), lines=True, chunksize=10)
type(review_reader)
类型调用返回
pandas.io.json.json.JsonReader
看起来不错。
然后我尝试
for chunk in review_reader:
print(chunk)
如 pandas user guide 中所引用我收到一个错误:
ValueError: Unexpected character found when decoding 'false'
更新 - 有人认为该问题是由数据文件中嵌入(带引号)“\n”字符引起的; pandas 看到的 JSON 记录不是每行一个,而是多行。
如果是这样的话,错误消息非常不透明。另外,对于 600 万行,我应该如何告诉 pd.read_json
忽略 "\n"
并只查看数据中的实际换行符?
更新
有人建议,如果我修复我的拼写错误(这是这篇文章中的拼写错误,而不是我的代码中的拼写错误)并使用 Unix 文件路径而不是 URL(JSON 不关心:请参阅文档)。
当我这样做但保留 StringIO() 时,我会得到一个不同的 ValueError。
当我执行此操作但删除 StringIO() 时,代码可以正常工作。
这看起来很脆弱。 :-(
<小时/>注意 本教程有答案。我已经尝试过该代码。答案关键使用
review_reader =
pd.read_json(filename, lines=True, chunksize=10)
抛出类型错误
sequence item 0: expected str instance, bytes found
添加 StringIO()
似乎已经解决了这个问题。
输入示例 JSON 记录,输入文件的每行一个。
{"review_id":"Amo5gZBvCuPc_tZNpHwtsA","user_id":"DzZ7piLBF-WsJxqosfJgtA","business_id":"qx6WhZ42eDKmBchZDax4dQ","星星":5.0,"有用":1,"有趣":0 ,"cool":0,"text":"我们的家人喜欢这里的食物。快捷、友好、美味,是一家适合带 child 去的很棒的餐厅。5 颗星!","date":"2017-03-27 01 :14:37"}
最佳答案
首先,你的
path 'file://localhost/Users/.../DSC_Intro/'
不是有效的 python 代码。如果您尝试这样执行,您将收到无效语法错误。那么,我假设这只是显示路径变量的值。我不知道这些省略号是字面意思还是您的环境截断 path
显示的结果。我在这里假设您的路径是系统的有效文件 URL,因为这里考虑不正确的路径似乎没有密切关系。
无论哪种方式,是的,read_json
可以从您指定的文件 URL 中读取 json(我在那里学到了一些东西),如果您一次性读取它:
pd.read_json(fname, lines=True)
但是如果您尝试从中创建一个阅读器,请指定
pd.read_json(fname, lines=True, chunksize=...)
然后你就得到了
TypeError: sequence item 0: expected str instance, bytes found
其次,是的,用 StringIO 包装你的类似文件的参数可以使这个错误消失,但它对你可能认为的任何原因都没有帮助,并且它的使用是基于对你指向的 pandas 文档的误读。
我将在此处引用 read_json
文档中的一些内容:
Signature: pd.read_json( path_or_buf=None, ...
path_or_buf : a valid JSON string or file-like, default: None The string could be a URL. Valid URL schemes include http, ftp, s3, gcs, and file. For file URLs, a host is expected. For instance, a local file could be
file://localhost/path/to/table.json
因此,使用 read_json,您可以给它一个有效 JSON 的实际字符串,也可以给它一个指向包含 JSON 的文件的类文件对象。
您引用的 pandas 文档中的注意事项:
In [258]: jsonl = '''
.....: {"a": 1, "b": 2}
.....: {"a": 3, "b": 4}
.....: '''
.....:
是 JSON,而不是路径。当他们的例子这样做时:
df = pd.read_json(jsonl, lines=True)
它只是解析字符串中的 JSON - 这里不涉及文件。当它想要演示从文件中分块读取时,它会这样做
# reader is an iterator that returns `chunksize` lines each iteration
In [262]: reader = pd.read_json(StringIO(jsonl), lines=True, chunksize=1)
换句话说,它们通过 StringIO() 包装 JSON 字符串,而不是路径。这仅用于文档示例的目的,因此您可以看到,如果您将 JSON 字符串视为从文件中读取,则可以分块读取它。这就是 StringIO() 的作用。因此,当您将描述文件 URL 的字符串包装在 StringIO() 中时,我希望 read_json
会尝试将该字符串解释为从文件读取的 JSON 并解析它。它失败是可以理解的,因为它不是 JSON。
这让我们回到了为什么 read_json
无法分块读取文件 URL 的问题。我对此没有立即好的答案。我怀疑它在于 read_json
如何打开文件 URL 的内部结构,或者其背后的函数是什么。如果您有意或被迫从文件 URL 进行此分块,那么我怀疑您会考虑控制文件打开的模式,或者可能以某种方式为 read_json
提供明确的指导> 如何解释它获得的字节流。我不确定像 urllib2
这样的库在这里可能有用。
但是让我们在这里讨论最佳解决方案。为什么我们尝试将路径指定为文件 URL?只需将您的路径指定为操作系统路径,例如
path = '/path/to/my/data/'
然后
filename = path + 'yelp_dataset/review_100.json'
# create a reader to read in chunks
review_reader = pd.read_json(filename, lines=True, chunksize=10)
我敢打赌它会按预期工作! (这对我来说是这样,一如既往)。警告:Windows 不使用正斜杠路径分隔符,并且通过以上述方式连接字符串来构造路径可能很脆弱,但通常如果您使用“正确的”正斜杠分隔符(微笑),体面的语言内部会理解这一点。它使用反斜杠构建路径,这肯定会给您带来痛苦。但请留意这一点。
关于python - ValueError 使用 pd.read_json 读取大数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56727700/
我正在尝试并行运行具有循环返回值的函数。但它似乎停留在 results = pool.map(algorithm_file.foo, population) 在 for 循环的第二次迭代中 r
Serving Flask 应用程序“服务器”(延迟加载) 环境:生产警告:这是一个开发服务器。不要在生产部署中使用它。请改用生产 WSGI 服务器。 Debug模式:开启 在 http://0.0.
我使用“product.pricelist”模型中的 get_product_price_rule() 函数。我的代码是: price = self._get_display_price(produ
我收到以下错误: Traceback (most recent call last): File "/home/odroid/trackAndFollow/getPositions.py", line
我正在尝试采用机器学习方法,但遇到了一些问题。这是我的代码: import sys import scipy import numpy import matplotlib import pandas
我尝试使用 tensorflow 1.4.0 对我的原始记录进行分类。过程如下。 拳头:读取图片和标签,输出“tfrecord”格式的文件。第二:读取tf记录和训练 编写tfrecord脚本是 !/u
我是新手,所以需要任何帮助,当我要求一个例子时,我的教授给我了这段代码,我希望有一个工作模型...... from numpy import loadtxt import numpy as np fr
我无法弄清楚为什么会出现此 ValueError...为了提供一些上下文,我正在使用 requests、BeautifulSoup 和 json 与 python 来抓取站点 json 数据。 我不确
我已经尝试使用这两个循环以及列表理解。即使我正在尝试将数字转换为列表中的整型,两者都无法解析整数。
我已经尝试使用这两个循环以及列表理解。即使我正在尝试将数字转换为列表中的整型,两者都无法解析整数。
我只有四个星期的 Python 经验。使用 Tkinter 创建一个工具,将新的公司 Logo 粘贴到现有图像之上。 下面的方法是获取给定目录中的所有图像并将新 Logo 粘贴到初始级别。现有图像、编
我只有四个星期的 Python 经验。使用 Tkinter 创建一个工具,将新的公司 Logo 粘贴到现有图像之上。 下面的方法是获取给定目录中的所有图像并将新 Logo 粘贴到初始级别。现有图像、编
我在尝试在 Keras 2.0.8、Python 3.6.1 和 Tensorflow 后端中训练模型时遇到问题。 错误消息: ValueError: Error when checking targ
我已经尝试使用这两个循环以及列表理解。即使我正在尝试将数字转换为列表中的整型,两者都无法解析整数。
我有这段代码: while True: try: start = int(input("Starting number: ")) fin = int(i
我是 python 的初学者编码员,试图制作一个“模具滚筒”,您可以在其中选择模具的大小,它在我的代码的第 20 行返回此错误 import sys import random import geto
我有以下代码: import fxcmpy import pandas as pd from pandas import datetime from pandas import DataFrame a
我正在尝试使用 django 和 python 制作一个博客应用程序。我也在尝试使用 s3 存储桶进行存储,使用 heroku 进行部署。我正在学习 coreymschafer 的在线教程。我正在按照
我创建了一个 numpy 数组(考虑输入数据)并想更改顺序(一些数值运算后的输出数据)。在使用转换后的数组时,我遇到错误并找到了根本原因。请在下面找到详细信息并使用 numpy 版本 1.19.1 i
我已经引用了之前的查询 All arguments should have the same length plotly但仍然没有得到我的问题的答案。 我有一个黄金价格数据集。 Date
我是一名优秀的程序员,十分优秀!