Начиная с версии 0.11.0, столбцы могут быть нарезаны так, как вы пытались использовать .loc
индексатор:
df.loc[:, 'C':'E']
эквивалентно
df[['C', 'D', 'E']] # or df.loc[:, ['C', 'D', 'E']]
и возвращает столбцы от C
до E
.
Демонстрация случайно сгенерированного DataFrame:
import pandas as pd
import numpy as np
np.random.seed(5)
df = pd.DataFrame(np.random.randint(100, size=(100, 6)),
columns=list('ABCDEF'),
index=['R{}'.format(i) for i in range(100)])
df.head()
Out:
A B C D E F
R0 99 78 61 16 73 8
R1 62 27 30 80 7 76
R2 15 53 80 27 44 77
R3 75 65 47 30 84 86
R4 18 9 41 62 1 82
Чтобы получить столбцы от C до E (обратите внимание, что в отличие от целочисленного среза, в столбцы включается 'E'):
df.loc[:, 'C':'E']
Out:
C D E
R0 61 16 73
R1 30 80 7
R2 80 27 44
R3 47 30 84
R4 41 62 1
R5 5 58 0
...
То же самое работает для выбора строк на основе меток. Получите строки от R6 до R10 из этих столбцов:
df.loc['R6':'R10', 'C':'E']
Out:
C D E
R6 51 27 31
R7 83 19 18
R8 11 67 65
R9 78 27 29
R10 7 16 94
.loc
также принимает логический массив, поэтому вы можете выбрать столбцы, чья соответствующая запись в массиве - True
. Например, df.columns.isin(list('BCD'))
возвращает array([False, True, True, True, False, False], dtype=bool)
- Истина, если имя столбца находится в списке ['B', 'C', 'D']
; В противном случае неверно.
df.loc[:, df.columns.isin(list('BCD'))]
Out:
B C D
R0 78 61 16
R1 27 30 80
R2 53 80 27
R3 65 47 30
R4 9 41 62
R5 78 5 58
...
Вы никогда не захотите использовать
.ix
, поскольку это неоднозначно. При необходимости используйте.iloc
или.loc
.Есть ли способ сделать это без обращения к именам заголовков? как и в R, я могу сделать это так:
> csvtable_imp_1 <- csvtable_imp[0:6]
, и он выбирает величину дельты первых столбцов от 0 до 6. Все, что мне нужно было сделать, это прочитать csv-таблицу, разделенную readr lib.Я еще немного поработал с этим. Нашел то, что работало как хотел. По умолчанию выбирается количество символов, а не столбцов.
infile_1 = largefile_stay.ix[:,0:6]
Для тех, кто наткнулся на это поздно,
ix
теперь устарел. Pandas рекомендует использовать либо:loc
(индексирование на основе меток), либоiloc
(индексирование на основе позиций).Pandas: Замена для .ix