Spec-Zone.ru › pandas 0.20

Индексирование и выбор данных

Информация об этикетках осей в объектах pandas служит для многих целей:

  • Определяет данные (т. е. предоставляет метаданные) с использованием известных индикаторов, важных для анализа, визуализации и интерактивного отображения в консоли
  • Обеспечивает автоматическое и явное выравнивание данных
  • Позволяет интуитивно получать и устанавливать подмножества набора данных

В этом разделе мы сосредоточимся на последнем пункте: как резать, нарезать и в целом получать и устанавливать подмножества объектов pandas. Основное внимание будет уделено Series и DataFrame, поскольку в этой области им уделено больше внимания в разработке. В будущем ожидается больше работы над многомерными структурами данных (включая Panel), особенно в области расширенного индексирования на основе меток.

Примечание

Операторы индексирования Python и NumPy [] и оператор атрибута . обеспечивают быстрый и простой доступ к структурам данных pandas в широком диапазоне случаев использования. Это делает интерактивную работу интуитивной, так как вам почти ничего не нужно изучать, если вы уже знаете, как работать со словарями Python и массивами NumPy. Однако, так как тип данных, к которому нужно получить доступ, не известен заранее, непосредственное использование стандартных операторов имеет некоторые ограничения по оптимизации. Для кода в производстве мы рекомендуем использовать оптимизированные методы доступа к данным pandas, описанные в этой главе.

Предупреждение

Возврат копии или ссылки при операции установки может зависеть от контекста. Это иногда называется chained assignment и следует избегать. См. Возврат представления вместо копии

Предупреждение

В версии 0.15.0 Index внутренне был переработан, чтобы больше не наследовать от ndarray, а вместо этого наследовать от PandasObject, подобно остальным объектам pandas. Это должно быть прозрачное изменение с очень ограниченными последствиями для API (см. Внутренняя рефакторизация)

Предупреждение

Индексирование по целочисленному индексу с плавающей точкой было уточнено в версии 0.18.0. Для обзора изменений см. здесь.

См. MultiIndex/Расширенное индексирование для MultiIndex и более расширенной документации по индексированию.

См. справочник для некоторых расширенных стратегий

Разные варианты индексирования

Новое в версии 0.11.0.

Для поддержки более явного индексирования на основе местоположения в выборке объектов были внесены многочисленные изменения по запросам пользователей. Pandas теперь поддерживает три типа многоосевого индексирования.

  • .loc в основном основан на метках, но также может использоваться с булевым массивом. .loc вызовет KeyError при отсутствии элементов. Допустимые входные данные:

    • Одна метка, например, 5 или 'a', (обратите внимание, что 5 интерпретируется как метка индекса. Это использование не является целочисленной позицией по индексу)
    • Список или массив меток ['a', 'b', 'c']
    • Объект среза с метками 'a':'f', (обратите внимание, что в отличие от обычных срезов python, оба начала и останов включены!)
    • Булевой массив
    • Функция callable с одним аргументом (вызываемая Series, DataFrame или Panel), которая возвращает допустимый результат для индексирования (один из вышеперечисленных)

      Новое в версии 0.18.1.

    См. больше в Выбор по метке

  • .iloc в основном основан на целочисленных позициях (от 0 до length-1 оси), но также может использоваться с булевым массивом. .iloc вызовет IndexError если указанный индексатор находится вне границ, за исключением срезных индексаторов, которые позволяют индексировать значения вне границ. (это соответствует семантике срезов python/numpy). Допустимые входные данные:

    • Целое число, например, 5
    • Список или массив целых чисел [4, 3, 0]
    • Объект среза с целыми числами 1:7
    • Булевой массив
    • Функция callable с одним аргументом (вызываемая Series, DataFrame или Panel), которая возвращает допустимый результат для индексирования (один из вышеперечисленных)

      Новое в версии 0.18.1.

    См. больше в Выбор по позиции

    См. больше в Расширенное индексирование и Расширенное иерархическое.

  • .loc, .iloc, и также [] индексирование могут принимать callable в качестве индексатора. См. больше в Выбор по вызываемому объекту.

Получение значений из объекта с многоосевым выбором использует следующую нотацию (используя .loc в качестве примера, но применимо и к .iloc). Любой из аксессоров осей может быть нулевым срез :. Оси, опущенные из спецификации, считаются :. (например, p.loc['a'] эквивалентно p.loc['a', :, :])

Тип объекта Индексаторы
Series s.loc[indexer]
DataFrame df.loc[row_indexer,column_indexer]
Panel p.loc[item_indexer,major_indexer,minor_indexer]

Основы

Как упоминалось при представлении структур данных в предыдущем разделе, основная функция индексирования с [] (также известна как __getitem__ для тех, кто знаком с реализацией поведения класса в Python) заключается в выборе подмножеств меньшей размерности. Таким образом,

Тип объекта Выбор Тип возвращаемого значения
Series series[label] скалярное значение
DataFrame frame[colname] Series соответствующее имени столбца
Panel panel[itemname] DataFrame соответствующее имени элемента

Здесь мы создаем простой временной ряд данных, который будет использоваться для иллюстрации функциональности индексирования:

In [1]: dates = pd.date_range('1/1/2000', periods=8)

In [2]: df = pd.DataFrame(np.random.randn(8, 4), index=dates, columns=['A', 'B', 'C', 'D'])

In [3]: df
Out[3]: 
                   A         B         C         D
2000-01-01  0.469112 -0.282863 -1.509059 -1.135632
2000-01-02  1.212112 -0.173215  0.119209 -1.044236
2000-01-03 -0.861849 -2.104569 -0.494929  1.071804
2000-01-04  0.721555 -0.706771 -1.039575  0.271860
2000-01-05 -0.424972  0.567020  0.276232 -1.087401
2000-01-06 -0.673690  0.113648 -1.478427  0.524988
2000-01-07  0.404705  0.577046 -1.715002 -1.039268
2000-01-08 -0.370647 -1.157892 -1.344312  0.844885

In [4]: panel = pd.Panel({'one' : df, 'two' : df - df.mean()})

In [5]: panel
Out[5]: 
<class 'pandas.core.panel.Panel'>
Dimensions: 2 (items) x 8 (major_axis) x 4 (minor_axis)
Items axis: one to two
Major_axis axis: 2000-01-01 00:00:00 to 2000-01-08 00:00:00
Minor_axis axis: A to D

Примечание

Ни одна из функций индексирования не является специфической для временных рядов, если не указано иное.

Таким образом, как указано выше, у нас есть самое базовое индексирование с помощью []:

In [6]: s = df['A']

In [7]: s[dates[5]]
Out[7]: -0.67368970808837059

In [8]: panel['two']

© 2008–2012, AQR Capital Management, LLC, Lambda Foundry, Inc. and PyData Development Team
Licensed under the 3-clause BSD License.
https://pandas.pydata.org/pandas-docs/version/0.20.3/indexing.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API