使用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
相关产品推荐
相关产品推荐

