【发布时间】:2018-04-07 00:43:24
【问题描述】:
我正在尝试使用下面的代码将一组非常大的嵌套 json 文件读入 pandas 数据帧。这是几百万条记录,它是来自 yelp 学术数据集的“评论”文件。
有人知道更快的方法吗?
是否可以只加载 json 记录的样本?我可能只需要几十万条记录就可以了。
另外,我可能不需要 review.json 文件中的所有字段,我可以只加载其中的一个子集,例如 user_id、business_id、stars 吗?那会加快速度吗?
我会发布示例数据,但我什至无法完成加载。
代码:
df_review = pd.read_json('dataset/review.json', lines=True)
更新:
代码:
reviews = ''
with open('dataset/review.json','r') as f:
for line in f.readlines()[0:1000]:
reviews += line
testdf = pd.read_json(reviews,lines=True)
错误:
---------------------------------------------------------------------------
UnicodeDecodeError Traceback (most recent call last)
<ipython-input-18-8e4a45990905> in <module>()
5 reviews += line
6
----> 7 testdf = pd.read_json(reviews,lines=True)
/Users/anaconda/lib/python2.7/site-packages/pandas/io/json.pyc in read_json(path_or_buf, orient, typ, dtype, convert_axes, convert_dates, keep_default_dates, numpy, precise_float, date_unit, encoding, lines)
273 # commas and put it in a json list to make a valid json object.
274 lines = list(StringIO(json.strip()))
--> 275 json = u'[' + u','.join(lines) + u']'
276
277 obj = None
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 357: ordinal not in range(128)
更新 2:
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
reviews = ''
with open('dataset/review.json','r') as f:
for line in f.readlines()[0:1000]:
reviews += line
testdf = pd.read_json(reviews,lines=True)
【问题讨论】: