如何将3D numpy张量转换为单元格存储数组的2D pandas DataFrame?
3D NumPy张量转单元格为数组的Pandas DataFrame的便捷方法
问题描述
我可以初始化一个2D pandas DataFrame,然后遍历numpy张量的索引,将每个位置的数组存储到DataFrame的对应单元格中,示例代码如下:
data_3d=np.random.rand(2,3,4) for i in np.arange(2): for j in np.arange(3): df.iloc[i,j]=data_3d[i,j]
请问pandas中是否有便捷函数可完成此类数据结构转换?
解决方案
当然有更便捷的方式,无需手动嵌套循环,以下是两种实用方法:
方法一:直接用
pd.DataFrame构造
将3D数组的前两个维度转为二维嵌套列表,直接传入pd.DataFrame即可:import numpy as np import pandas as pd data_3d = np.random.rand(2, 3, 4) df = pd.DataFrame(data_3d.tolist())data_3d.tolist()会把(2,3,4)形状的数组转换成2行3列的嵌套结构,每个元素是长度为4的列表/数组,pd.DataFrame会自动将这些元素作为单元格值。方法二:用
numpy.apply_along_axis保留数组类型
如果需要单元格内保持numpy数组类型(而非列表),可以借助apply_along_axis:df = pd.DataFrame(np.apply_along_axis(lambda x: x, 2, data_3d))参数
axis=2指定沿着第三个维度处理,每个子数组会被直接保留,最终DataFrame的每个单元格都是numpy数组对象。
这两种方法都是批量操作,比手动循环效率更高,代码也更简洁。
内容的提问来源于stack exchange,提问作者user3761743
相关产品推荐
相关产品推荐

