如果不制作副本,他们就很难做到这一点。从理论上讲,如果您只有一个 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(例如另一个浮动列),您将触发一个副本。所以你必须非常小心。
也就是说,从另一个帧的视图创建几乎不需要内存,只是一个指针,所以非常快。
| 归档时间: |
|
| 查看次数: |
3982 次 |
| 最近记录: |