如何将Excel文件转换为嵌套数组?求批量转换解决方案
用Python+pandas处理Excel转嵌套数组(支持大规模数据)
核心思路
从你的数据结构来看,是三级嵌套结构:顶级键(a/b)→ 二级键(aa/ab/ba/bb)→ 元素列表。用pandas可以高效完成分组聚合,且支持大规模数据的分块处理,避免内存溢出。
步骤&代码
1. 安装依赖
如果还没装pandas和Excel处理库,先执行:
pip install pandas openpyxl
(如果是xls格式,换成xlrd)
2. 常规数据处理代码
假设你的Excel有三列,分别对应三级结构(比如列名是level1、level2、level3),代码如下:
import pandas as pd # 读取Excel,仅加载需要的三列,减少内存占用 df = pd.read_excel("your_file.xlsx", usecols=["level1", "level2", "level3"]) # 分组聚合生成目标结构 result = {} for level1_key, group in df.groupby("level1"): # 二级分组,把同一level2下的元素收集成列表 level2_dict = group.groupby("level2")["level3"].apply(list).to_dict() result[level1_key] = [level2_dict] # 输出结果或保存为文件 print(result)
3. 大规模数据优化方案
如果Excel文件超大(比如几十万行),用分块读取避免内存爆掉:
import pandas as pd result = {} chunk_size = 10000 # 每次读1万行,可根据自身内存调整 # 分块读取Excel for chunk in pd.read_excel("your_large_file.xlsx", usecols=["level1", "level2", "level3"], chunksize=chunk_size): for level1_key, group in chunk.groupby("level1"): level2_dict = group.groupby("level2")["level3"].apply(list).to_dict() # 合并分块结果,避免重复分组 if level1_key in result: existing_level2 = result[level1_key][0] for k, v in level2_dict.items(): if k in existing_level2: existing_level2[k].extend(v) else: existing_level2[k] = v else: result[level1_key] = [level2_dict] # 保存为JSON文件方便后续使用 import json with open("result.json", "w", encoding="utf-8") as f: json.dump(result, f, indent=2, ensure_ascii=False)
补充说明
- 如果你的Excel列名不是
level1/level2/level3,直接替换成实际列名,或者用列索引(比如usecols=[0,1,2])。 - 代码会自动去重吗?不会,如果需要给每个二级列表去重,把
apply(list)改成apply(lambda x: list(set(x)))即可(注意会打乱元素顺序)。
内容的提问来源于stack exchange,提问作者glastiva
相关产品推荐
相关产品推荐

