我一直在尝试将pandas数据帧转换为numpy数组,传递数据类型和头名称以便于参考。我需要这样做,因为对熊猫的处理太慢了,numpy快了10倍。我有这段代码,所以除了结果看起来不像标准的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')])
我是不是漏掉了什么,还是有别的办法?我有许多df要转换,它们的数据类型和列名也不同,所以我需要这种自动化的方法。我也需要它是有效的,因为大量的df的
使用
df.to_records()
将数据帧转换为结构化数组。您可以通过
index=False
从结果中删除索引。结构化数组将始终具有一维。那是无法改变的。
但你可以通过以下方式得到形状:
为了提高性能,如果要操作数据,最好通过
df.values
使用numpy.array
,并用整数键在字典中记录列名。相关问题 更多 >
编程相关推荐