我想将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,)
代码是否有问题? 谢谢!
答案 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维数组。