我一直在尝试选择列,并用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
答案 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