python - 如何使 Pandas 数据框 Fortran 类型有序

标签 python performance pandas numpy

我知道一点,在 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/

相关文章:

python - Pandas 的 Mypy/typeshed stub

python - 如何交换数组中的二维

python - 如何让 Jupyter Notebook 使用我的 PC 上安装的最新版本的 Python?

c++ - 为什么我的代码会导致指令缓存未命中?

eclipse - 从 SonarLint 中排除 JS 文件

iOS如何减慢特定时长的视频播放速度

python - selenium.common.exceptions.WebDriverException : Message: Can not connect to the Service error using ChromeDriver Chrome through Selenium Python

python - cx_Freeze 构建错误?

python - 在 Pandas 中生成具有二进制计数值的交叉表类型数据框

python - 除非在 10 分钟内,否则按前 15 分钟计算