如何将三维numpy数组转换为存储一维numpy数组的pandas DataFrame?
将三维NumPy数组转换为每个单元格含一维数组的Pandas DataFrame
方法1:利用数组切片直接构造DataFrame
通过遍历数组的第二个维度,将对应切片作为DataFrame的列,逻辑直观且高效:
import numpy as np import pandas as pd # 示例三维数组 arr = np.array([[[1., 1., 1., 1., 1.], [0., 0., 0., 0., 0.], [1., 2., 3., 4., 6.]], [[0., 0., 0., 0., 0.], [11., 22., 33., 44., 66.], [0., 0., 0., 0., 0.]]]) # 转换为目标DataFrame df_arr = pd.DataFrame({ f'col{i}': arr[:, i] for i in range(arr.shape[1]) }) print(df_arr)
输出结果:
col0 col1 col2 0 [1.0, 1.0, 1.0, 1.0, 1.0] [0.0, 0.0, 0.0, 0.0, 0.0] [1.0, 2.0, 3.0, 4.0, 6.0] 1 [0.0, 0.0, 0.0, 0.0, 0.0] [11.0, 22.0, 33.0, 44.0, 66.0] [0.0, 0.0, 0.0, 0.0, 0.0]
方法2:转换为object类型数组后构造
将三维数组转为object类型的二维数组(每个元素为一维数组),再直接传入DataFrame构造函数,代码更紧凑:
# 转换为object类型二维数组 arr_obj = arr.astype(object).reshape(arr.shape[0], arr.shape[1]) # 构造DataFrame并指定列名 df_arr = pd.DataFrame(arr_obj, columns=[f'col{i}' for i in range(arr.shape[1])])
说明
两种方法均依赖NumPy和Pandas原生操作,避免了低效的Python循环,可高效处理大规模数组:
- 方法1通过切片提取列数据,逻辑清晰易理解;
- 方法2利用类型转换和reshape一步到位,代码更简洁。
内容的提问来源于stack exchange,提问作者Sergey Zakharov
相关产品推荐
相关产品推荐

