如何在Pandas中将行内数组值拆分分配至多列?
将Pandas DataFrame的数组列拆分为多列
问题背景
现有如下结构的Pandas DataFrame,其中FEATURE列存储的是形状为(300,)的NumPy数组:
| TEXT | FEATURE |
|---|---|
| test | [0.2, 0.3, 0.4, ..., n] |
| test | [0.2, 0.3, 0.4, ..., n] |
| test2 | [0.2, 0.3, 0.4, ..., n] |
| test2 | [0.2, 0.3, 0.4, ..., n] |
需要将其转换为以下格式,把FEATURE数组的每个元素拆分为单独的列:
| TEXT | FEATURE 1 | FEATURE 2 | FEATURE 3 | ... | FEATURE 300 |
|---|---|---|---|---|---|
| test | 0.2 | 0.3 | 0.4 | ... | n |
| test | 0.2 | 0.3 | 0.4 | ... | n |
| test2 | 0.2 | 0.3 | 0.4 | ... | n |
| test2 | 0.2 | 0.3 | 0.4 | ... | n |
解决方案
方法1:直接将数组列转为DataFrame后拼接
这种方法利用pd.DataFrame将数组列直接展开为多列,再和原TEXT列合并:
import pandas as pd import numpy as np # 模拟原始DataFrame(实际使用时替换为你的数据) df = pd.DataFrame({ 'TEXT': ['test', 'test', 'test2', 'test2'], 'FEATURE': [np.random.rand(300) for _ in range(4)] }) # 把FEATURE列的数组展开成新DataFrame feature_cols = pd.DataFrame(df['FEATURE'].tolist(), index=df.index) # 给新列命名为FEATURE 1到FEATURE 300 feature_cols.columns = [f'FEATURE {i+1}' for i in feature_cols.columns] # 合并原TEXT列和拆分后的特征列 final_df = pd.concat([df['TEXT'], feature_cols], axis=1)
方法2:用apply(pd.Series)快速展开
通过对FEATURE列应用pd.Series,可以一键将数组拆分为多列,再拼接TEXT列:
# 展开数组列并命名 feature_cols = df['FEATURE'].apply(pd.Series).rename(columns=lambda x: f'FEATURE {x+1}') # 合并得到最终结果 final_df = pd.concat([df['TEXT'], feature_cols], axis=1)
注意事项
- 两种方法都是基于Pandas的向量化操作,处理300维数组效率很高,不需要逐行循环。
- 因为题目中明确
FEATURE列的数组是固定300长度,所以不会出现列数不一致或NaN填充的问题。
内容的提问来源于stack exchange,提问作者Alex Nikitin
相关产品推荐
相关产品推荐

