例如:
nrow = 10
ncol= 10
a = np.arange(nrow*ncol,dtype=np.int32).reshape(nrow,ncol)
a = pd.DataFrame(a)
ix_list = np.arange(nrow,dtype=np.int32)
print np.isfortran(a.values) # False
print np.isfortran(a.loc[ix_list,:].values) # True
为什么.loc用fortran有序numpy数组创建pandas数据帧?我可以强制它用C命令的numpy数组创建pandas数据帧吗?在
无法回答您的第一个问题,但在数据帧上调用
.values
将返回numpy ndarray,因此:.flags.f_contiguous
(https://docs.scipy.org/doc/numpy/reference/generated/numpy.isfortran.html)np.ascontiguousarray()
或者
np.asfortranarray()
希望有帮助!在
索引问题会创建一个F有序数组,如
^{pr2}$flags
和strides
中所示。这是我在普通numpy数组上执行transpose
时看到的。在但其他
loc
索引生成一个C顺序数组:这看起来是
pandas
loc
索引器中的一个bug。在我猜
np.ascontiguousarray
是确保所有case都是C序的最便宜的方法,因为它执行np.array(..., copy=False)
,这是一个条件copy
。已经是C
的数组将不会生成副本。在在快速测试中,添加
copy
或np.ascontiguousarray
并不会减慢速度。在在numpy数组上选择行比使用
loc
快得多:相关问题 更多 >
编程相关推荐