You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优雅拆分Pandas DataFrame中含可迭代对象的列?

优雅拆分Pandas列中的序列数据为多列

嘿,这个需求我太有共鸣了!其实Pandas本身就有简洁的方法能实现你想要的类似splittuple的效果,不用像你之前的两种方式那样绕路。

最贴近你设想的简洁写法

直接用pd.Series包装你的序列结果,就能直接赋值给新列(包括覆盖原有列),完美贴合你想要的语法逻辑:

from pandas import DataFrame, Series

data = DataFrame({"label": [a for a in "abcde"], "x": range(5)})
# 直接赋值,覆盖原有x列并新增x2列
data[["x", "x2"]] = data["x"].apply(lambda x: Series([x, x*2]))

print(data)

输出完全符合你的预期:

label  x  x2
0     a  0   0
1     b  1   2
2     c  2   4
3     d  3   6
4     e  4   8

更高效的大数据量版本

如果你的数据集规模较大,apply(pd.Series)的逐行构造开销会比较明显,这时候可以用tolist()转成嵌套列表后直接构造DataFrame,同时指定索引避免匹配问题:

from pandas import DataFrame

data = DataFrame({"label": [a for a in "abcde"], "x": range(5)})
data[["x", "x2"]] = DataFrame(
    data["x"].apply(lambda x: (x, x*2)).tolist(),
    index=data.index
)

这个方法的执行速度比apply(pd.Series)快很多,尤其适合处理百万级以上的数据集。

对比你现有方式的优势

  • 你的方式一需要先删除原有列再合并,步骤繁琐,还容易因索引错位导致数据混乱;
  • 方式二通过字符串中转的思路完全没必要,不仅效率低下,还可能在数据包含特殊字符时出现解析错误;
  • 上面的两种方法都是原地直接赋值,逻辑清晰直观,和你设想的splittuple(expand=True)用法几乎一致,代码可读性拉满。

内容的提问来源于stack exchange,提问作者Vladimir Gorshkov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:32:19