如何从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
相关产品推荐
相关产品推荐

