Выбор нескольких столбцов данных по позициям в пандах
У меня есть (большой) фрейм данных. Как я могу выбрать конкретные столбцы по позиции? например, столбцы 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
5 ответов
То, что вам нужно, это 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
Вы можете выбрать столбцы 0, 1, 4 следующим образом:
df.iloc[:, [0, 1, 4]]
Подробнее об этом вы можете прочитать в разделе "Индексирование и выбор данных".
• iloc в первую очередь основан на целочисленной позиции (от 0 до length-1 оси), но также может использоваться с логическим массивом..iloc вызовет IndexError, если запрошенный индексатор выходит за пределы, за исключением индексаторов срезов, которые допускают индексацию за пределами границ. (это соответствует семантике фрагмента python/numpy). Допустимые входы:
Inte целое число, например, 5
List Список или массив целых чисел [4, 3, 0]
Object Объект среза с целыми 1:7
Boo логический массив
Вызываемая функция с одним аргументом (вызывающий Series, DataFrame или Panel), которая возвращает действительный вывод для индексации (один из приведенных выше)
Вы также можете использовать 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
ОП лицо ошибки от 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 или np.r_
как предложил Вэнь Цзябао.
Используйте метод Pandas iloc:
df_filtered = df.iloc[:, [1,2,3,5,6]]