Python 从数据帧到三维阵列的形状
我想将pandas dataframe转换为3d阵列,但无法获得3d阵列的真实形状: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
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)