使用Pandas将JSON文件导出为CSV耗时过长是否正常?文件过大是否为诱因?
解决Pandas导出大JSON到CSV耗时过长的问题
嘿,你遇到的这个问题大概率是因为合并后的getaround_final.json体积太大导致的——毕竟你循环加载了多个JSON文件并把所有数据合并到一个列表里,最终生成的JSON可能包含了海量数据,直接用pd.read_json一次性加载再转CSV,会因为内存占用过高、IO效率低拖慢整个流程。下面给你几个针对性的优化方案:
1. 跳过中间大JSON,直接逐块写入CSV
你现在的流程是先合并成大JSON再转CSV,这一步完全可以省略。直接在加载每个小JSON文件后,就把数据追加到CSV里,既节省存储大JSON的空间,也减少了一次IO操作,内存压力小很多。
修改后的代码示例:
import json import pandas as pd from datetime import datetime, timedelta search_date = datetime(2019, 8, 4) nextSequence = timedelta(days=9) path = 'C:/Users/coppe/dox/Drivy/' output_csv = path + 'getaround_final.csv' # 标记是否是第一次写入(用来生成表头) first_write = True while search_date <= datetime(2019, 12, 17): if search_date == datetime(2019, 12, 8): search_date += nextSequence continue file = f"{datetime.date(search_date)}/{datetime.date(search_date)}_final.json" with open(path + file) as json_file: cars = json.load(json_file) # 将当前JSON数据转为DataFrame df = pd.DataFrame(cars) # 追加到CSV,第一次写入表头,后续跳过表头 df.to_csv(output_csv, index=False, mode='a', header=first_write) first_write = False search_date += nextSequence
2. 若需保留大JSON,用分块读取优化
如果你确实需要保留那个大JSON文件,可以用Pandas的分块读取功能,把大文件拆成小块处理,避免一次性加载全部数据到内存:
chunk_size = 10000 # 可根据你的内存情况调整大小 reader = pd.read_json(path + 'getaround_final.json', chunksize=chunk_size) with open(path + 'getaround_final.csv', 'w') as csv_file: first_chunk = True for chunk in reader: chunk.to_csv(csv_file, index=False, header=first_chunk) first_chunk = False
3. 扁平化复杂的JSON结构
如果你的JSON数据有多层嵌套(比如每个car里还有嵌套的字典或列表),Pandas解析时会额外消耗时间。可以用pd.json_normalize()把嵌套结构扁平化,让数据更适合CSV存储:
# 替换原来的df = pd.DataFrame(cars) df = pd.json_normalize(cars)
这些方案都能有效降低内存占用、提升处理速度,你可以根据自己的需求选择最合适的方式~
内容的提问来源于stack exchange,提问作者M. Coppee
相关产品推荐
相关产品推荐

