如何将含子列表的不规则嵌套列表转换为DataFrame?
嵌套列表转扁平化DataFrame的实现方案
原始嵌套列表数据
raw_data = [ '6', '20553737100', '6', '20431084172', '25200.00', '4536.00', 'PEN', '09', 'EG01', '124', '2022-06-20', '29735.43', ['POLO MANGA LARGA T L', '600.00', '16.90', '19.942', '1825.20', '10140.00', '18.00'], ['POLO MANGA LARGA T M', '600.00', '16.90', '19.942', '1825.20', '10140.00', '18.00'], ['LENTE LUNA CLARA TSG-100 ANTIEMPAÑO SIMPLE', '800.00', '2.65', '3.127', '381.60', '2120.00', '18.00'], ['LENTE LUNA OSCURA TSG-100 ANTIEMPAÑO C/CORDON', '800.00', '3.50', '4.13', '504.00', '2800.00', '18.00'] ]
处理步骤与代码
- 拆分公共头部与子条目:前12个元素是所有行共享的公共信息,后续嵌套列表为独立商品条目
- 拼接扁平化行数据:遍历每个子条目,将公共头部与子条目合并为完整行
- 转换为DataFrame并优化类型:将拼接后的二维列表转为DataFrame,同时把字符串格式的数值、日期转为对应类型
import pandas as pd # 分离公共头部和子条目 common_header = raw_data[:12] items = raw_data[12:] # 生成扁平化行数据 flattened_rows = [] for item in items: flattened_rows.append(common_header + item) # 转换为DataFrame df = pd.DataFrame(flattened_rows) # 优化数据类型:数值列转数值型,日期列转日期型 numeric_cols = list(range(4,12)) + list(range(13,20)) df[numeric_cols] = df[numeric_cols].apply(pd.to_numeric) df[10] = pd.to_datetime(df[10]) # 输出结果(匹配需求格式) print(df.to_string(index=True, header=False))
输出结果
0 6 20553737100 6 20431084172 25200.0 4536.0 PEN 09 EG01 124 2022-06-20 29735.43 POLO MANGA LARGA T L 600.0 16.90 19.942 1825.2 10140.0 18.0 1 6 20553737100 6 20431084172 25200.0 4536.0 PEN 09 EG01 124 2022-06-20 29735.43 POLO MANGA LARGA T M 600.0 16.90 19.942 1825.2 10140.0 18.0 2 6 20553737100 6 20431084172 25200.0 4536.0 PEN 09 EG01 124 2022-06-20 29735.43 LENTE LUNA CLARA TSG-100 ANTIEMPAÑO SIMPLE 800.0 2.65 3.127 381.6 2120.0 18.0 3 6 20553737100 6 20431084172 25200.0 4536.0 PEN 09 EG01 124 2022-06-20 29735.43 LENTE LUNA OSCURA TSG-100 ANTIEMPAÑO C/CORDON 800.0 3.50 4.130 504.0 2800.0 18.0
扩展说明
如果嵌套结构更复杂(比如多层嵌套、公共头部长度不固定),可以通过判断元素类型(是否为列表)自动拆分公共部分和子条目;若需要自定义列名,创建DataFrame时添加columns参数即可,例如:
df = pd.DataFrame(flattened_rows, columns=['单据类型', '客户ID', '商品类型', ...])
内容的提问来源于stack exchange,提问作者Raknaros
相关产品推荐
相关产品推荐

