我一直在尝试将pandas DataFrame转换为numpy数组,保留数据类型和标题名称以便参考。由于使用pandas的处理速度太慢,而numpy的速度快10倍,所以我需要这样做。我从SO上得到了这段代码,它给了我所需的结果,但是结果看起来不像标准的numpy数组-即形状中没有显示列数。
[In]:
df = pd.DataFrame(randn(10,3),columns=['Acol','Ccol','Bcol'])
arr_ip = [tuple(i) for i in df.as_matrix()]
dtyp = np.dtype(list(zip(df.dtypes.index, df.dtypes)))
dfnp= np.array(arr_ip, dtype=dtyp)
print(dfnp.shape)
dfnp
[Out]:
(10,) #expecting (10,3)
array([(-1.0645345 , 0.34590193, 0.15063829),
( 1.5010928 , 0.63312454, 2.38309797),
(-0.10203999, -0.40589525, 0.63262773),
( 0.92725915, 1.07961763, 0.60425353),
( 0.18905164, -0.90602597, -0.27692396),
(-0.48671514, 0.14182815, -0.64240004),
( 0.05012859, -0.01969079, -0.74910076),
( 0.71681329, -0.38473052, -0.57692395),
( 0.60363249, -0.0169229 , -0.16330232),
( 0.04078263, 0.55943898, -0.05783683)],
dtype=[('Acol', '<f8'), ('Ccol', '<f8'), ('Bcol', '<f8')])
我是否漏掉了什么,或者有其他方法可以做到这一点?我有很多要转换的数据框,它们的数据类型和列名不同,因此我需要自动化的方法。由于数据框数量庞大,我还需要它具有高效性。