You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pandas read_json读取多行JSON返回JSONReader而非DataFrame的问题

问题解答

首先,先明确你遇到的两个问题的答案:

1. 使用chunksize返回JsonReader是正常现象

当你在pd.read_json()中指定chunksize参数时,这完全是pandas的设计预期行为。这个参数的核心作用是应对大文件场景——让pandas分批读取数据,避免一次性加载全部内容导致内存溢出,所以它不会直接返回完整的DataFrame,而是返回一个可迭代的JsonReader对象。

如果你需要得到完整的DataFrame(内存允许的情况下),可以遍历这个迭代器并合并结果:

chunk_reader = pd.read_json('../Dataset/file1.json', orient='columns', lines=True, chunksize=10)
# 合并所有chunk为完整DataFrame
df = pd.concat(chunk_reader, ignore_index=True)

2. 移除chunksize后报错的原因及解决方法

你遇到的ValueError: Expected object or value,问题出在你的JSON文件格式上:

你的文件内容是一行内包含多个用空格分隔的JSON字典(比如{"a":1,"b":2} {"c":3,"d":4} ...),但lines=True参数要求文件的每一行是一个独立的JSON对象,pandas无法识别这种一行多对象的格式,因此触发报错。

针对这个问题,有两种实用的解决方式:

方式一:预处理文件,将每个JSON对象放到单独一行

先修改文件格式,让每个字典占一行,再用read_json读取:

# 读取原始文件并调整格式
with open('../Dataset/file1.json', 'r') as infile, open('../Dataset/processed_file.json', 'w') as outfile:
    content = infile.read().strip()
    # 把空格分隔的JSON对象替换为换行符
    outfile.write(content.replace(' ', '\n'))

# 读取处理后的标准格式文件
import pandas as pd
df = pd.read_json('../Dataset/processed_file.json', lines=True)

方式二:直接读取并解析,不修改原文件

如果不想改动原文件,可以手动读取内容并逐个解析JSON字符串:

import pandas as pd
import json

data_list = []
with open('../Dataset/file1.json', 'r') as f:
    # 读取整行内容,按空格分割成单个JSON字符串
    raw_content = f.read().strip()
    json_strings = raw_content.split(' ')
    # 逐个解析JSON字符串并加入列表
    for json_str in json_strings:
        if json_str:  # 跳过可能出现的空字符串
            data_list.append(json.loads(json_str))

# 转换为pandas DataFrame
df = pd.DataFrame(data_list)

这样处理后,你就能得到正常的pandas DataFrame了。

内容的提问来源于stack exchange,提问作者Aman Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:12:51