如何将Pandas单行列名含层级分类的列表值转结构化表格?
最优解决方案:拆分层级列名并展开列表数据
示例输入
先构造符合你描述的示例DataFrame:
import pandas as pd df = pd.DataFrame({ "电子产品>手机>智能手机": [["iPhone 14", "小米13", "华为Mate 60"]], "电子产品>平板>安卓平板": [["iPad Air", "华为MatePad"]], "日用品>纸巾": [["维达", "清风"]] # 模拟层级不足3级的情况 })
完整实现代码
import pandas as pd # 1. 将宽表转为长格式,提取分类路径和对应item列表 df_long = df.melt(var_name="category_path", value_name="items") # 2. 拆分分类路径为层级列,自动补全空值(处理层级不足3级的情况) df_long[["category 1", "category 2", "category 3"]] = ( df_long["category_path"] .str.split(">", expand=True) .fillna("") ) # 3. 展开item列表,将每个元素转为单独行 df_final = df_long.explode("items").rename(columns={"items": "item"}) # 4. 调整列顺序并清理冗余列 df_final = df_final[["item", "category 1", "category 2", "category 3"]] # 查看结果 print(df_final)
代码说明
melt():把原DataFrame的列名(分类路径)转为数据列,将单行长表转为两列的长格式,是处理这类宽表的基础操作。str.split(">", expand=True):直接将以>分隔的分类路径拆分为多列,expand=True会自动将拆分结果转为DataFrame列,配合fillna("")处理层级不足3级的场景,避免出现NaN。explode():Pandas专门用于展开列表/数组类型单元格的方法,能高效将列表中的每个元素转为独立行,同时保留对应分类信息,性能远优于手动循环。- 最后调整列顺序,得到完全符合需求的结构化表格。
输出结果
item category 1 category 2 category 3 0 iPhone 14 电子产品 手机 智能手机 1 小米13 电子产品 手机 智能手机 2 华为Mate 60 电子产品 手机 智能手机 3 iPad Air 电子产品 平板 安卓平板 4 华为MatePad 电子产品 平板 安卓平板 5 维达 日用品 纸巾 6 清风 日用品 纸巾
内容的提问来源于stack exchange,提问作者IDP
相关产品推荐
相关产品推荐

