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

如何从DataFrame的数组列生成指定列名的新列

问题:拆分列表列生成指定列名的DataFrame

现有如下结构的Pandas DataFrame:

+---------+
|     data|
+---------+
|[a, b, c]|
|[d, e, f]|
|[g, h, i]|
+---------+

同时有列名列表 ["first col", "second col", "third col"],需要将其转换为如下结构的DataFrame:

+-----------+-----------+----------+
|  first col| second col| third col|
+-----------+-----------+----------+
|          a|          b|         c|
|          d|          e|         f|
|          g|          h|         i|
+-----------+-----------+----------+

方法一:使用apply(pd.Series)拆分列

直接对包含列表的列调用apply(pd.Series),再为新列指定自定义名称:

import pandas as pd

# 构造原始DataFrame
df = pd.DataFrame({'data': [['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i']]})
col_names = ["first col", "second col", "third col"]

# 拆分列表列并设置列名
result_df = df['data'].apply(pd.Series)
result_df.columns = col_names

print(result_df)

方法二:通过tolist()构造新DataFrame

提取列表列的所有元素转为二维列表,直接用该列表和自定义列名创建新DataFrame:

import pandas as pd

df = pd.DataFrame({'data': [['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i']]})
col_names = ["first col", "second col", "third col"]

# 用列表数据直接构造目标DataFrame
result_df = pd.DataFrame(df['data'].tolist(), columns=col_names)

print(result_df)

方法三:使用explode+pivot拆分(扩展性更强)

先将列表拆分为多行,通过分组标记列位置,最后透视成目标结构:

import pandas as pd

df = pd.DataFrame({'data': [['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i']]})
col_names = ["first col", "second col", "third col"]

# 添加行索引用于分组
df['row_id'] = df.index
# 拆分列表为单行数据
exploded_df = df.explode('data')
# 标记每个元素的列位置
exploded_df['col_id'] = exploded_df.groupby('row_id').cumcount()
# 透视生成目标结构并设置列名
result_df = exploded_df.pivot(index='row_id', columns='col_id', values='data')
result_df.columns = col_names
result_df = result_df.reset_index(drop=True)

print(result_df)

注意事项

  • 方法一、二更适合列表长度固定统一的场景,代码简洁高效;
  • 方法三代码稍繁琐,但对后续复杂拆分需求的扩展性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 13:12:43