我知道一点,在 python pandas 包中,数据框有一部分是用 NumPy NDArrays 构建的。并且 numpy 可以选择数据顺序类型,例如“C”或“F”。
由于我总是要在巨大的数据帧(如 1 亿行)上的列上实现大量操作,我希望如果我有机会将数据帧从 c 类型转换为 f 类型,我可以大大提高性能,对吧?
如果是这样,我该怎么做?或者简单地使用 numpy,因为 pandas 数据框不是必须的,实际上是一个快速的答案。
谢谢
最佳答案
有趣的是,Pandas 对每一列都使用了内部 C 顺序 numpy 数组。每当您访问多个列或所有数据框时,它都会连接这些 numpy 数组并返回一个 Fortran 顺序 numpy 数组。
print(df[df.columns[0]].values.flags)
print(df[df.columns[0:2]].values.flags)
print(df.values.flags)
#Single column
C_CONTIGUOUS : True
F_CONTIGUOUS : True
#Multiple columns
C_CONTIGUOUS : False
F_CONTIGUOUS : True
#Entire dataframe
C_CONTIGUOUS : False
F_CONTIGUOUS : True
因此,列操作非常快(添加/编辑/删除等)。这就是为什么在数据帧中迭代行很慢。 如果您的程序有更多的行操作,请将其转换为 C 顺序,如下所示。
df = pd.DataFrame(np.ascontiguousarray(df.values), columns=df.columns)
每当我完成按列处理时,我会将其转换为 C 连续数组,因为缩放、批量训练 DNN 在 C 顺序数组中要快得多。
关于python - 如何使 Pandas 数据框 Fortran 类型有序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49420272/