我有一个(大)数据帧。如何按位置选择特定列?例如第1..3,5,6列
我试图以这种方式执行此操作,而不是仅删除column4,因为我的数据集中有大量行,我想按位置选择:
df=df[df.columns[0:2,4:5]]
但是这会给IndexError: too many indices for array
DF输入
Col1 Col2 Col3 Col4 Col5 Col6
1 apple tomato pear banana banana
1 apple grape nan banana banana
1 apple nan banana banana banana
1 apple tomato banana banana banana
1 apple tomato banana banana banana
1 apple tomato banana banana banana
1 avacado tomato banana banana banana
1 toast tomato banana banana banana
1 grape tomato egg banana banana
DF输出 - 所需
Col1 Col2 Col3 Col5 Col6
1 apple tomato banana banana
1 apple grape banana banana
1 apple nan banana banana
1 apple tomato banana banana
1 apple tomato banana banana
1 apple tomato banana banana
1 avacado tomato banana banana
1 toast tomato banana banana
1 grape tomato banana banana
答案 0 :(得分:3)
您可以这样选择第0,1,4列:
df.iloc[:, [0, 1, 4]]
您可以在Indexing and Selecting Data中了解详情。
•iloc主要基于整数位置(从0到长度-1) ()),但也可以与布尔数组一起使用。 .iloc会提高 如果请求的索引器超出限制,则为IndexError,但slice除外 允许越界索引的索引器。 (这符合 python / numpy slice语义)。允许的输入是:
◦整数,例如5
◦整数列表或数组[4,3,0]
◦具有整数1:7的切片对象
◦布尔数组
◦带有一个参数的可调用函数(调用Series,DataFrame 或者)并返回有效的索引输出(其中一个) 以上)
答案 1 :(得分:3)
你需要的是numpy np.r_
df.iloc[:,np.r_[0:2,4:5]]
Out[265]:
Col1 Col2 Col5
0 1 apple banana
1 1 apple banana
2 1 apple banana
3 1 apple banana
4 1 apple banana
5 1 apple banana
6 1 avacado banana
7 1 toast banana
8 1 grape banana
答案 2 :(得分:1)
错误OP face来自df.columns[0:2,4:5]
,其中放入的索引太多。 IIUC,您可以将所需的所有列名称放在一起进行选择。
from itertools import chain
cols_to_select = list(v for v in chain(df.columns[0:2], df.columns[4:5]))
df_filtered = df[cols_to_select]
如果cols_to_select中可能存在名称冲突,请使用iloc
作为jp_data_analysis建议进行选择,或按Wen建议使用np.r_
进行选择。
答案 3 :(得分:1)
您还可以将range
与concatenate
中的numpy
一起使用,并获取使用np.concatenate
组合两个不同范围的列:
import numpy as np
df = df[df.columns[np.concatenate([range(0,3),range(4,6)])]]
df
输出:
Col1 Col2 Col3 Col5 Col6
0 1 apple tomato banana banana
1 1 apple grape banana banana
2 1 apple NaN banana banana
3 1 apple tomato banana banana
4 1 apple tomato banana banana
5 1 apple tomato banana banana
6 1 avacado tomato banana banana
7 1 toast tomato banana banana
8 1 grape tomato banana banana
答案 4 :(得分:0)
使用pandas iloc方法:
df_filtered = df.iloc[:, [1,2,3,5,6]]