Python 如何使dataframe Fortran类型有序

Python 如何使dataframe Fortran类型有序,python,performance,pandas,numpy,Python,Performance,Pandas,Numpy,我知道在python pandas包中,dataframe有一部分是用NumPy Ndarray构建的。numpy有一个选项,您可以选择您的数据顺序类型,如“C”或“F” 因为我总是要在巨大的数据帧(比如1亿行)上的列上实现很多操作,所以我希望如果我有机会将数据帧从c类型传输到f类型,我可以大大提高性能,对吗 如果是,我怎么做?或者简单地使用numpy,因为熊猫数据帧不是必须的,一个快速的答案实际上是 谢谢有趣的是,Pandas在内部为每列使用C顺序numpy数组。无论何时访问多个列或所有dat

我知道在python pandas包中,dataframe有一部分是用NumPy Ndarray构建的。numpy有一个选项,您可以选择您的数据顺序类型,如“C”或“F”

因为我总是要在巨大的数据帧(比如1亿行)上的列上实现很多操作,所以我希望如果我有机会将数据帧从c类型传输到f类型,我可以大大提高性能,对吗

如果是,我怎么做?或者简单地使用numpy,因为熊猫数据帧不是必须的,一个快速的答案实际上是


谢谢

有趣的是,Pandas在内部为每列使用C顺序numpy数组。无论何时访问多个列或所有dataframe,它都会连接这些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
因此,列操作非常快(添加/编辑/删除等)。这就是为什么在dataframe中对行进行迭代很慢的原因。 如果您的程序有更多的行操作,请将其转换为C顺序,如下所示

df = pd.DataFrame(np.ascontiguousarray(df.values), columns=df.columns)

每当我在列中完成处理时,我都会将其转换为C连续数组,因为在C顺序数组中,批量训练DNN的扩展速度要快得多。

有趣的是,Pandas在内部为每个列使用C顺序numpy数组。无论何时访问多个列或所有dataframe,它都会连接这些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
因此,列操作非常快(添加/编辑/删除等)。这就是为什么在dataframe中对行进行迭代很慢的原因。 如果您的程序有更多的行操作,请将其转换为C顺序,如下所示

df = pd.DataFrame(np.ascontiguousarray(df.values), columns=df.columns)

每当我在列中完成处理时,我都会将其转换为C连续数组,因为在C顺序数组中,批量训练DNN的扩展速度要快得多。

对不起,我认为pandas完全不可能做到这一点。与按数组和维度操作的
numpy
不同,
pandas
使用带行和列的表。这种方法本质上是不对称的。对不起,我不相信pandas会这样做。与按数组和维度操作的
numpy
不同,
pandas
使用带行和列的表。这种方法本质上是不对称的。