从 reindex 文档 中得知:
使用可选的填充逻辑将 DataFrame 转换为新的索引,将 NA/NaN 放置在先前索引中没有值的位置。除非新索引等同于当前索引且 copy=False,否则会生成一个新对象。
因此,我认为通过在原地设置 copy=False
我将获得重新排序的 Dataframe
。 然而,现实是我确实得到了副本,并需要将其重新赋值给原始对象。 如果可以避免(原因来自此其他问题),我不想将其重新赋值回来。
这是我正在做的:
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.rand(5, 5))
df.columns = [ 'a', 'b', 'c', 'd', 'e' ]
df.head()
优势:
a b c d e
0 0.234296 0.011235 0.664617 0.983243 0.177639
1 0.378308 0.659315 0.949093 0.872945 0.383024
2 0.976728 0.419274 0.993282 0.668539 0.970228
3 0.322936 0.555642 0.862659 0.134570 0.675897
4 0.167638 0.578831 0.141339 0.232592 0.976057
重建索引可以给我正确的输出,但我需要将其重新赋值给原始对象,这正是我想通过使用copy=False
避免的:
df.reindex( columns=['e', 'd', 'c', 'b', 'a'], copy=False )
在那一行之后,期望的输出是:
e d c b a
0 0.177639 0.983243 0.664617 0.011235 0.234296
1 0.383024 0.872945 0.949093 0.659315 0.378308
2 0.970228 0.668539 0.993282 0.419274 0.976728
3 0.675897 0.134570 0.862659 0.555642 0.322936
4 0.976057 0.232592 0.141339 0.578831 0.167638
copy=False
在原地不起作用的原因是什么?
这个是否有可能实现?
使用Python 3.5.3和Pandas 0.23.3
df
重新索引,并按顺序指定列名称,将其赋值给df
,代码如下:df = df.reindex(columns=['e', 'd', 'c', 'b', 'a'])
- BENY