熊猫数据框的形状到3d数组

时间:2018-07-01 10:18:36

标签: python pandas numpy

我想将pandas数据帧转换为3d数组,但无法获得3d数组的真实形状:

@Builder

但是,当我设置为这样时,我可以得到形状

df = pd.DataFrame(np.random.rand(4,5), columns = list('abcde'))
df['a'][3:]=1
df['a'][:3]=2
a3d = np.array(list(df.groupby('a').apply(pd.DataFrame.as_matrix)))
a3d.shape
(2,)

代码是否有问题? 谢谢!

1 个答案:

答案 0 :(得分:0)

代码没错,这是因为在第一种情况下,您没有3D数组。根据{{​​3}}(此处为3d)的定义,前两行说明每个维度必须具有相同的大小。在第一种情况下:

df = pd.DataFrame(np.random.rand(4,5), columns = list('abcde'))
df['a'][3:]=1
df['a'][:3]=2
a3d = np.array(list(df.groupby('a').apply(pd.DataFrame.as_matrix))) 

您有一个大小为2的1维数组(a3d.shape向您显示),其中包含形状为(1,5)和(3,5)的2维数组

a3d[0].shape
Out[173]: (1, 5)
a3d[1].shape
Out[174]: (3, 5)

因此您所称a3d的第一维度中的两个元素的大小都不相同,因此不能视为此ndarray的其他维度。

第二种情况下

df = pd.DataFrame(np.random.rand(4,5), columns = list('abcde'))
df['a'][2:]=1
df['a'][:2]=2
a3d = np.array(list(df.groupby('a').apply(pd.DataFrame.as_matrix)))

a3d[0].shape
Out[176]: (2, 5)
a3d[1].shape
Out[177]: (2, 5)

第一个维度的两个元素都具有相同的大小,因此a3d是一个3维数组。