Мне любопытно, почему df[2]
не поддерживается, пока df.ix[2]
и df[2:3]
работают оба.
In [26]: df.ix[2]
Out[26]:
A 1.027680
B 1.514210
C -1.466963
D -0.162339
Name: 2000-01-03 00:00:00
In [27]: df[2:3]
Out[27]:
A B C D
2000-01-03 1.02768 1.51421 -1.466963 -0.162339
Я ожидал df[2]
бы работать так же, как и df[2:3]
в соответствии с соглашением об индексации Python. Есть ли конструктивная причина не поддерживать индексирование строки одним целым числом?
df.ix[2]
не работает - по крайней мере, не вpandas version '0.19.2'
[]
, см. Ответ ниже . Также НИКОГДА НЕ ИСПОЛЬЗОВАТЬ.ix
, это устарелоОтветы:
повторяя @HYRY, см. новые документы в 0.11
http://pandas.pydata.org/pandas-docs/stable/indexing.html
Здесь у нас есть новые операторы,
.iloc
для Explicity поддерживается только целочисленная индексация, а.loc
для Explicity поддерживается только индексация метокнапример, представьте этот сценарий
[]
разрезает только строки (по расположению метки)источник
iloc
строки иloc
метки..iloc
ищет вещи по их порядку в индексе (например,.iloc[[2]]
это вторая «строка» в)df
. Эта строка находится в позиции индекса4
..loc
ищет их по значению индекса. Так может быть, "iloc" это как "я", как вA[i]
? :)df.loc[-1] = df.iloc[[0]]
, и вставить это? Кадр поставляется с добавленным индексным столбцом с ошибкойValueError: cannot set a row with mismatched columns
(см. Stackoverflow.com/questions/47340571/… )Основная цель оператора индексации DataFrame
[]
- выбор столбцов.Когда оператору индексирования передается строка или целое число, он пытается найти столбец с этим конкретным именем и вернуть его как ряд.
Итак, в вопросе выше:
df[2]
ищет имя столбца, совпадающее с целочисленным значением2
. Этот столбец не существует, иKeyError
он поднимается.Оператор индексации DataFrame полностью меняет поведение для выбора строк при использовании обозначения среза
Как ни странно, если задан фрагмент, оператор индексации DataFrame выбирает строки и может делать это по целому расположению или по метке индекса.
Это будет срез, начиная со строки с целочисленным местоположением от 2 до 3, исключая последний элемент. Итак, всего один ряд. Следующее выбирает строки, начинающиеся с целочисленного местоположения 6 до, но не включая 20 каждой третьей строкой.
Вы также можете использовать фрагменты, состоящие из строковых меток, если в вашем индексе DataFrame есть строки. Для получения дополнительной информации см. Это решение на .iloc против .loc .
Я почти никогда не использую эту запись слайса с оператором индексации, так как он не является явным и почти никогда не используется. При нарезке по строкам придерживайтесь
.loc/.iloc
.источник
Вы можете думать о DataFrame как о канале Series.
df[key]
попытаться выбрать индекс столбцаkey
и вернуть объект Series.Однако нарезка внутри [] разделяет строки, потому что это очень распространенная операция.
Вы можете прочитать документ для деталей:
http://pandas.pydata.org/pandas-docs/stable/indexing.html#basics
источник
Чтобы получить доступ к таблице панд на основе индекса, можно также рассмотреть параметр numpy.as_array, чтобы преобразовать таблицу в массив Numpy как
а потом
должно сработать.
источник
Вы можете взглянуть на исходный код .
DataFrame
имеет частную функцию_slice()
для нарезкиDataFrame
, и это позволяет параметруaxis
определять, какую ось нарезать.__getitem__()
ДляDataFrame
не устанавливает ось при вызове_slice()
. Таким образом,_slice()
нарезать его по умолчанию ось 0.Вы можете провести простой эксперимент, который может вам помочь:
источник
Вы можете перебирать фрейм данных, как это.
источник