Python 从数据帧到三维阵列的形状

Python 从数据帧到三维阵列的形状,python,pandas,numpy,Python,Pandas,Numpy,我想将pandas dataframe转换为3d阵列,但无法获得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))) a3d.shape (2,) 但是,当我设置为这个时,我可以得到形状 df = pd.Dat

我想将pandas dataframe转换为3d阵列,但无法获得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)))
a3d.shape
(2,)
但是,当我设置为这个时,我可以得到形状

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.shape
(2,2,5)
代码有什么问题吗?
谢谢

代码没有问题,因为在第一种情况下,您没有3d阵列。根据A(此处为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的一维数组(这是
a3d.shape
显示的内容),其中包含形状(1,5)和(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
是一个三维数组

你看了
数据类型了吗?或者阵列本身(哪个不是那么大)?
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)