繁体   English   中英

如何在不使用 python 循环的情况下读取 json 文件?

[英]How to read json file without using python loop?

我有一个 JSON 文件,我想将其转换为 DataFrame。由于数据集非常大(~30 GB),我发现我需要将块大小设置为限制。 代码是这样的:

import pandas as pd
pd.options.display.max_rows

datas = pd.read_json('/Users/xxxxx/Downloads/Books.json', chunksize = 1, lines = True)

datas

然后当我运行它时,结果是

<pandas.io.json._json.JsonReader at 0x15ce38550>

这是一个错误吗?

我还发现,如果您在datas中使用循环,它就会起作用。 有什么办法可以使用标准方式吗?

我不认为 pandas 是阅读巨型 json 文件时到 go 的方式。

首先,您应该检查您的文件是否实际上是有效的 JSON 格式(它完全包含在一个字典中)或者它是否是一个 JSONL 文件(每一行都是一个 JSON 格式的字典,但行没有连接)。

因为如果您正在使用包含这些巨大文件的 Amazon Review 数据集,它们都在 JSONL 中,但名为 JSON。

我可以推荐两个包来解析巨大的 JSON/JSONL 文件:

相当快: ujson

import ujson
with open(file_path) as f:
    file_contents = ujson.load(f)

更快: ijson

import ijson
file_contents = [t for t in ijson.items(open(file_path), "item")]

这也允许您使用像tqdm这样的进度条:

import ijson
from tqdm import tqdm
file_contents = [t for t in tqdm(ijson.items(open(file_path), "item"))]

很高兴知道它的速度有多快,因为它向您显示了它已经读取了多少行。 由于您的文件是 30GB,因此可能需要相当长的时间才能全部阅读,并且很高兴知道它是否仍在运行,或者 memory 是否崩溃,或者是否有其他问题。

然后,您可以尝试使用pandas.DataFrame.from_dict(file_contents)从字典中创建一个 DataFrame,但我认为 30GB 的内容远远超过 pandas 允许的最大行数。 虽然不太确定。 一般来说,我真的会推荐使用字典来处理这么多内容,因为它要快得多。 然后仅当您需要显示其中的某些部分以进行可视化或分析时才将其转换为 DataFrame。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM