Pandas爆炸函数怎么用_explode(‘col’)将列表一列拆解为多行数据

张开发
2026/6/9 9:05:10 15 分钟阅读
Pandas爆炸函数怎么用_explode(‘col’)将列表一列拆解为多行数据
explode() 必须作用于DataFrame并指定字符串列名如df.explode(col)不能用于Series、不加引号或传列表要求元素为可迭代对象否则报错默认保留原索引可assign添加源索引追踪。为什么 explode() 拆不出数据反而报 ValueError: explode() missing 1 required positional argument: column因为 explode() 是 DataFrame 方法不是 Series 方法——很多人直接对列df[col]调用就掉坑里了。它必须作用于整个 DataFrame并明确指定列名。正确写法只有这一种df.explode(col)不能写成 df[col].explode()会报错也不能漏引号df.explode(col) 会当成变量名找不着。只支持单列一次只能传一个字符串比如 tags不支持 [tags, ids]如果要炸多列得链式调用df.explode(tags).explode(ids)注意顺序后炸的列会受前一次行数膨胀影响原列里有 None 或空列表 []默认会变成 NaN 行想删掉这些行得额外加 .dropna(subset[col])explode() 遇到 nan、None、非迭代对象就崩是的。explode() 要求目标列每个元素必须是可迭代对象list、tuple、set遇到 np.nan、None、int、str单个字符串不算“容器”就会抛 TypeError: Cannot explode non-iterable object。常见场景是读 CSV 后某列本该是列表但被 pandas 当成字符串读进来了比如存的是 [a,b]带引号的文本不是真正的 Python list。先检查类型df[col].apply(type).unique()看到 class/class 就得处理安全转列表用 ast.literal_eval别用 eval有执行风险import astbrdf[col] df[col].apply(lambda x: ast.literal_eval(x) if isinstance(x, str) and x.strip().startswith([) else x)统一兜底把所有非列表/元组/集合的值转为空列表避免中断df[col] df[col].apply(lambda x: list(x) if hasattr(x, __iter__) and not isinstance(x, (str, bytes)) else [])用 explode() 后索引乱了怎么保持原始行号可追溯默认情况下explode() 会保留原索引重复出现——比如第 3 行拆出 4 个元素结果里就有四个索引为 3 的行。这看着“乱”其实是设计使然方便你后续用 groupby(level0) 回溯。 ARTi.PiCS ARTi.PiCS是一款由AI驱动的虚拟头像生产器可以生成200多个不同风格的酷炫虚拟头像

更多文章