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

如何将DataFrame中数组类型列展平为多列(动态适配形状)

动态展平Pandas DataFrame中的数组列

原始数据生成代码

import pandas as pd
import numpy as np
df = pd.DataFrame({'Data': [np.array([[1,1], [2,2], [3,1], [10,1]]), 
                            np.array([[11,1],[12,1],[13,1],[20,1]]), 
                            np.array([[11,1],[13,1],[14,1],[20,1]])], 
                   'label' : ['a', 'a', 'b']})

需求说明

需要将Data列中存储的二维数组动态展平为连续的多列(如示例中生成col_1至col_8),要求适配任意统一形状的数组,不使用硬编码的列数或长度数值。

解决方案

以下是两种高效实现方式,均支持动态适配数组形状:

方法1:结合apply与concat(易读性高)

# 获取单个数组展平后的总长度(适配动态形状)
flat_total_length = df['Data'].iloc[0].size
# 生成动态列名
column_names = [f'col_{idx+1}' for idx in range(flat_total_length)]

# 将每个数组展平为一维,转为DataFrame
flattened_df = pd.DataFrame(
    df['Data'].apply(lambda arr: arr.flatten()).tolist(),
    columns=column_names
)

# 合并原DataFrame的其他列与展平后的列
result = pd.concat([df.drop('Data', axis=1), flattened_df], axis=1)
print(result)

方法2:基于Numpy向量化操作(性能更优)

当数据量较大时,推荐使用Numpy的向量化操作替代apply,提升运行效率:

flat_total_length = df['Data'].iloc[0].size
column_names = [f'col_{idx+1}' for idx in range(flat_total_length)]

# 直接将所有展平后的数组堆叠为二维数组
flattened_array = np.vstack(df['Data'].apply(lambda arr: arr.flatten()))
flattened_df = pd.DataFrame(flattened_array, columns=column_names)

result = pd.concat([df.drop('Data', axis=1), flattened_df], axis=1)
print(result)

输出示例

执行后会得到如下结构的DataFrame:

label  col_1  col_2  col_3  col_4  col_5  col_6  col_7  col_8
0     a      1      1      2      2      3      1     10      1
1     a     11      1     12      1     13      1     20      1
2     b     11      1     13      1     14      1     20      1

注意事项

  • 上述方法默认Data列中所有数组的形状完全一致,若存在形状不一致的数组,展平后长度不同会导致报错,这种场景需额外处理(如填充缺失值)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 21:37:20