是否确保 df.corr() 列的顺序
Is the ordered of df.corr() columns ensured
在Pandas中我们可以用.corr()
生成相关矩阵。我的问题很简单:是否保留了原始数据框的列顺序?从我的测试来看似乎是这样,但我想确定一下。
我问是因为我在 Python 3.7.3 上,字典维护插入顺序。我不知道当前的问题是否与此相关,但如果 Pandas 在幕后使用字典,那么很可能 corr()
是按预期在 Python 3.6 中排序的+ 但不是低版本。
嗯,如果你看source code for corr
,下面的代码是在开头:
numeric_df = self._get_numeric_data()
cols = numeric_df.columns
idx = cols.copy()
mat = numeric_df.values
正如您在此处看到的,只要方法 _get_numeric_data
保持顺序,corr
也应该保持顺序。深入研究 _get_numeric_data
,您可以看到 this block:
self._consolidate_inplace()
return self.combine([b for b in self.blocks if b.is_numeric], copy)
_consolidate_inplace
在元组中构建数据帧的合并部分(顺序保留),而 _get_numeric_data
使用列表理解将此元组过滤为仅数字块(顺序仍保留)。
更重要的是,pandas
实际上并没有为您的列名使用字典。
columns
本身是 Index
class 的 just instances,它(来自文档字符串)是有序的。
因此,回答您的问题:是的,顺序在 corr
中得到保证,因为它获取和遍历数据框列的方式也保留了顺序。
在Pandas中我们可以用.corr()
生成相关矩阵。我的问题很简单:是否保留了原始数据框的列顺序?从我的测试来看似乎是这样,但我想确定一下。
我问是因为我在 Python 3.7.3 上,字典维护插入顺序。我不知道当前的问题是否与此相关,但如果 Pandas 在幕后使用字典,那么很可能 corr()
是按预期在 Python 3.6 中排序的+ 但不是低版本。
嗯,如果你看source code for corr
,下面的代码是在开头:
numeric_df = self._get_numeric_data()
cols = numeric_df.columns
idx = cols.copy()
mat = numeric_df.values
正如您在此处看到的,只要方法 _get_numeric_data
保持顺序,corr
也应该保持顺序。深入研究 _get_numeric_data
,您可以看到 this block:
self._consolidate_inplace()
return self.combine([b for b in self.blocks if b.is_numeric], copy)
_consolidate_inplace
在元组中构建数据帧的合并部分(顺序保留),而 _get_numeric_data
使用列表理解将此元组过滤为仅数字块(顺序仍保留)。
更重要的是,pandas
实际上并没有为您的列名使用字典。
columns
本身是 Index
class 的 just instances,它(来自文档字符串)是有序的。
因此,回答您的问题:是的,顺序在 corr
中得到保证,因为它获取和遍历数据框列的方式也保留了顺序。