更改熊猫数据框的列顺序

Iva*_*van 5 python pandas

是否可以就地更改数据框中列的顺序?

如果是,那会比复印更快吗?我正在处理具有1亿多行的大型数据框。

我看到了如何使用副本更改顺序如何更改DataFrame列的顺序?

Jef*_*eff 5

如果不制作副本,他们就很难做到这一点。从理论上讲,如果您只有一个 dtype(或者仅在更改 dtype 的标签之外更改列),则可以这样做。但相当复杂,因此没有实现。

也就是说,如果你小心,你可以做到这一点。您应该只使用单数据类型的框架执行此操作(预先警告您)。

In [22]: df = DataFrame(np.random.randn(5,3),columns=list('ABC'))

In [23]: df
Out[23]: 
          A         B         C
0 -0.696593 -0.459067  1.935033
1  1.783658  0.612771  1.553773
2 -0.572515  0.634174  0.113974
3 -0.908203  1.454289  0.509968
4  0.776575  1.629816  1.630023
Run Code Online (Sandbox Code Playgroud)

如果df是多数据类型,则 df.values 将不是视图(当然,您可以子选择作为视图本身的单数据类型框架)。另一个注意事项,这并不总是可能将其作为视图出现。这取决于你在做什么,YMMV。

例如df.values.take([2,0,1],axis=1)给你相同的结果,但它是一个副本。

In [24]: df2 = DataFrame(df.values[:,[2,0,1]],columns=list('ABC'))

In [25]: df2
Out[25]: 
          A         B         C
0  1.935033 -0.696593 -0.459067
1  1.553773  1.783658  0.612771
2  0.113974 -0.572515  0.634174
3  0.509968 -0.908203  1.454289
4  1.630023  0.776575  1.629816
Run Code Online (Sandbox Code Playgroud)

我们对原始值有看法

In [26]: df2.values.base
Out[26]: 
array([[ 1.93503267,  1.55377291,  0.1139739 ,  0.5099681 ,  1.63002264],
       [-0.69659276,  1.78365777, -0.5725148 , -0.90820288,  0.7765751 ],
       [-0.45906706,  0.61277136,  0.63417392,  1.45428912,  1.62981613]])
Run Code Online (Sandbox Code Playgroud)

请注意,如果您随后分配给 df2(例如另一个浮动列),您将触发一个副本。所以你必须非常小心。

也就是说,从另一个帧的视图创建几乎不需要内存,只是一个指针,所以非常快。