在熊猫中同时重命名和选择列

时间:2019-08-10 21:07:54

标签: python pandas

我一直在尝试选择列,并用pandas重命名。在R's dplyr中,这很简单,但是当涉及到熊猫时,我找不到解决方法。

例如

import numpy as np
import pandas as pd
np.random.seed(128)

df = pd.DataFrame(np.random.random((5,7)), index=pd.Series(range(1,6), name="week"))
df

             0         1         2    ...            4         5         6
week                                  ...                                 
1     0.866637  0.263145  0.131408    ...     0.238924  0.645475  0.790599
2     0.601442  0.334299  0.119428    ...     0.109724  0.602113  0.251285
3     0.299681  0.517116  0.715203    ...     0.102088  0.706524  0.985842
4     0.559079  0.592019  0.741931    ...     0.125672  0.907613  0.573170
5     0.731224  0.301214  0.066628    ...     0.133776  0.655933  0.423496

然后尝试更改某些列名

df.rename(columns={0 : "L",1 : "W",2 : "C1",3 : "C2"},inplace=True)

并且不得不选择感兴趣的列

df.loc[:,'L','C2',4:6] 

但得到

  

df.loc [:,['L','C2',4:6]]

     

SyntaxError:语法无效

R's dplyr

只需一行代码就够了

select(L=0,W=1,C1=2,4:max(ncol(.))

为什么熊猫不那么简单,我该如何对熊猫做同样的事情?

预期输出应为

week                 L                        C2                      4                  5                   6
1   0.8666370428503979      0.041593443747687364    0.23892433469051455 0.6454746004955415  0.7905993520222332
2   0.6014424381923764      0.30913305250605294     0.10972378522258008 0.6021133114626169  0.25128495916256977
3   0.2996812876134075      0.9314494030471506      0.1020881539666203  0.7065238642131539  0.9858423635165023
4   0.5590790688036144      0.8212812049578435      0.12567153920750518 0.9076131583950552  0.5731702972368342
5   0.7312243453837555      0.16307047811396225     0.13377623506787528 0.6559325420882364  0.4234963284022535

2 个答案:

答案 0 :(得分:2)

IIUC,您需要:

df.loc[:, ['L', 'C2'] + [i for i in range(4, len(df.columns))]]

输出:

             L        C2         4         5         6
week                                                  
1     0.156464  0.197580  0.885015  0.991281  0.478843
2     0.744064  0.082760  0.694133  0.487298  0.026765
3     0.371953  0.015918  0.494651  0.965285  0.348584
4     0.528609  0.287760  0.788897  0.664366  0.094318
5     0.316789  0.211593  0.921653  0.005872  0.174702


说明:

您要寻找的零件:

[i for i in range(4, len(df.columns))]

哪个给:

[4, 5, 6]

此后,它是关于在Python中添加列表:

['L', 'C2'] + [i for i in range(4, len(df.columns))]

答案 1 :(得分:2)

或者,您可以使用.iloc

root