贝利信息

pandas 如何用 exploding columns 展开 list 列并保持索引

日期:2026-01-25 00:00 / 作者:舞夢輝影
explode()是pandas 0.25+展开list列的原生方法,保持原始索引(重复出现),不支持多列同时展开,需链式调用;默认将None展开为NaN行,空值处理需谨慎;性能上易致内存飙升,索引重复后不再唯一。

explode() 展开 list 列并保留原始索引

explode() 是 pandas 0.25+ 提供的原生方法,专为展开嵌套 list(或 tuple、Series)列设计,天然保持原始行索引。只要目标列每个元素是可迭代对象(如 [1, 2]["a", "b"]),调用后每项会“摊平”成独立行,原索引重复出现。

关键点:它不是“重置索引”,而是“复制索引”——原 df.index 不变,只是某些索引值出现多次。

处理含空值(NoneNaN)的 list 列

explode() 默认将 Nonepd.NA 展开为单个 NaN 行(即该行其他列照常,被展开列为 NaN)。如果想跳过这些空行,得先过滤或用 dropna() 清洗。

一次展开多列 list 的正确写法

explode() 不接受列表参数,不能写成 df.explode(["col1", "col2"])。必须逐列调用,且要注意顺序——后展开的列会基于前一次 explode 的结果继续拆分,可能产生笛卡尔式膨胀。

性能与内存注意事项

当 list 很长或行数很多时,explode() 会显著增加行数,可能引发内存飙升甚至 OOM。它内部是拷贝数据,不是视图。

真正容易被忽略的是索引语义变化:展开后索引不再是唯一标识符,所有依赖 df.loc[idx] 精确定位的操作都可能返回多行——这点在 join、赋值或调试时极易出错。