Spec-Zone.ru › pandas 2

pandas.DataFrame.loc

propertyDataFrame.loc[source]

Доступ к группе строк и столбцов по метке(ам) или булевому массиву.

.loc[] в основном основана на метках, но также может использоваться с булевым массивом.

Допустимые входные данные:

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

  • Список или массив меток, например ['a', 'b', 'c'].

  • Объект среза с метками, например 'a':'f'.

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

    Обратите внимание, что в отличие от обычных срезов Python, оба начала и конца включаются.

  • Булевый массив той же длины, что и ось, по которой выполняется срез, например [True, False, True].

  • Выравниваемый булевый Series. Индекс ключа будет выровнен перед маскированием.

  • Выравниваемый Index. Индекс возвращенного выбора будет совпадать с входом.

  • Функция callable с одним аргументом (вызываемый Series или DataFrame) и возвращающая допустимый результат для индексирования (один из вышеперечисленных вариантов).

Подробнее см. в Выбор по меткам.

Возбуждает:
KeyError

Если какие-либо элементы не найдены.

IndexingError

Если передан индексированный ключ, и его индекс не может быть выровнен с индексом фрейма.

См. также

DataFrame.at

Доступ к одному значению для пары меток строки/столбца.

DataFrame.iloc

Доступ к группе строк и столбцов по целочисленной позиции(ям).

DataFrame.xs

Возвращает поперечное сечение (строку(и) или столбец(ы)) из Series/DataFrame.

Series.loc

Доступ к группе значений с помощью меток.

Примеры

Получение значений

>>> df = pd.DataFrame([[1, 2], [4, 5], [7, 8]],
...                   index=['cobra', 'viper', 'sidewinder'],
...                   columns=['max_speed', 'shield'])
>>> df
            max_speed  shield
cobra               1       2
viper               4       5
sidewinder          7       8

Одиночная метка. Обратите внимание, что это возвращает строку в виде Series.

>>> df.loc['viper']
max_speed    4
shield       5
Name: viper, dtype: int64

Список меток. Обратите внимание, что использование [[]] возвращает DataFrame.

>>> df.loc[['viper', 'sidewinder']]
            max_speed  shield
viper               4       5
sidewinder          7       8

Одиночная метка для строки и столбца

>>> df.loc['cobra', 'shield']
2

Срез с метками для строки и одиночной меткой для столбца. Как упоминалось выше, обратите внимание, что в срез включаются и начало, и конец.

>>> df.loc['cobra':'viper', 'max_speed']
cobra    1
viper    4
Name: max_speed, dtype: int64

Булевый список с длиной, равной оси строк

>>> df.loc[[False, False, True]]
            max_speed  shield
sidewinder          7       8

Выравниваемый булевый Series:

>>> df.loc[pd.Series([False, True, False],
...                  index=['viper', 'sidewinder', 'cobra'])]
                     max_speed  shield
sidewinder          7       8

Index (то же поведение, что и df.reindex)

>>> df.loc[pd.Index(["cobra", "viper"], name="foo")]
       max_speed  shield
foo
cobra          1       2
viper          4       5

Условие, возвращающее булевый Series

>>> df.loc[df['shield'] > 6]
            max_speed  shield
sidewinder          7       8

Условие, возвращающее булевый Series со специфицированными метками столбцов

>>> df.loc[df['shield'] > 6, ['max_speed']]
            max_speed
sidewinder          7

Несколько условий, использующих &, возвращающих булевый Series

>>> df.loc[(df['max_speed'] > 1) & (df['shield'] < 8)]
            max_speed  shield
viper          4       5

Несколько условий, использующих |, возвращающих булевый Series

>>> df.loc[(df['max_speed'] > 4) | (df['shield'] < 5)]
            max_speed  shield
cobra               1       2
sidewinder          7       8

Пожалуйста, убедитесь, что каждое условие заключено в скобки (). Дополнительные сведения и объяснения булевого индексирования см. в руководстве пользователя.

Примечание

Если вы обнаруживаете, что используете 3 или более условий в .loc[], рассмотрите использование индексирования высокого уровня.

См. ниже, как использовать .loc[] в DataFrame с MultiIndex.

Функция, возвращающая булевый Series

>>> df.loc[lambda df: df['shield'] == 8]
            max_speed  shield
sidewinder          7       8

Установка значений

Установить значение для всех элементов, соответствующих списку меток

>>> df.loc[['viper', 'sidewinder'], ['shield']] = 50
>>> df
            max_speed  shield
cobra               1       2
viper               4      50
sidewinder          7      50

Установить значение для всей строки

>>> df.loc['cobra'] = 10
>>> df
            max_speed  shield
cobra              10      10
viper               4      50
sidewinder          7      50

Установить значение для всего столбца

>>> df.loc[:, 'max_speed'] = 30
>>> df
            max_speed  shield
cobra              30      10
viper              30      50
sidewinder         30      50

Установить значение для строк, соответствующих условию, заданному вызываемой функцией

>>> df.loc[df['shield'] > 35] = 0
>>> df
            max_speed  shield
cobra              30      10
viper               0       0
sidewinder          0       0

Добавить значение, соответствующее местоположению

>>> df.loc["viper", "shield"] += 5
>>> df
            max_speed  shield
cobra              30      10
viper               0       5
sidewinder          0       0

Установка с использованием Series или DataFrame устанавливает значения, соответствующие меткам индекса, а не позициям индекса.

>>> shuffled_df = df.loc[["viper", "cobra", "sidewinder"]]
>>> df.loc[:] += shuffled_df
>>> df
            max_speed  shield
cobra              60      20
viper               0      10
sidewinder          0       0

Получение значений в DataFrame с индексом, имеющим целочисленные метки

Еще один пример использования целых чисел для индекса

>>> df = pd.DataFrame([[1, 2], [4, 5], [7, 8]],
...                   index=[7, 8, 9], columns=['max_speed', 'shield'])
>>> df
   max_speed  shield
7          1       2
8          4       5
9          7       8

Срез с целочисленными метками для строк. Как упоминалось выше, обратите внимание, что в срез включаются и начало, и конец.

>>> df.loc[7:9]
   max_speed  shield
7          1       2
8          4       5
9          7       8

Получение значений с MultiIndex

Несколько примеров с DataFrame с MultiIndex

>>> tuples = [
...     ('cobra', 'mark i'), ('cobra', 'mark ii'),
...     ('sidewinder', 'mark i'), ('sidewinder', 'mark ii'),
...     ('viper', 'mark ii'), ('viper', 'mark iii')
... ]
>>> index = pd.MultiIndex.from_tuples(tuples)
>>> values = [[12, 2], [0, 4], [10, 20],
...           [1, 4], [7, 1], [16, 36]]
>>> df = pd.DataFrame(values, columns=['max_speed', 'shield'], index=index)
>>> df
                     max_speed  shield
cobra      mark i           12       2
           mark ii           0       4
sidewinder mark i           10      20
           mark ii           1       4
viper      mark ii           7       1
           mark iii         16      36

Одиночная метка. Обратите внимание, что это возвращает DataFrame с единственным индексом.

>>> df.loc['cobra']
         max_speed  shield
mark i          12       2
mark ii          0       4

Кортеж одиночного индекса. Обратите внимание, что это возвращает Series.

>>> df.loc[('cobra', 'mark ii')]
max_speed    0
shield       4
Name: (cobra, mark ii), dtype: int64

Одиночная метка для строки и столбца. Аналогично передаче кортежа, это возвращает Series.

>>> df.loc['cobra', 'mark i']
max_speed    12
shield        2
Name: (cobra, mark i), dtype: int64

Одиночный кортеж. Обратите внимание, что использование [[]] возвращает DataFrame.

>>> df.loc[[('cobra', 'mark ii')]]
               max_speed  shield
cobra mark ii          0       4

Одиночный кортеж для индекса с одиночной меткой для столбца

>>> df.loc[('cobra', 'mark i'), 'shield']
2

Срез от кортежа индекса до одиночной метки

>>> df.loc[('cobra', 'mark i'):'viper']
                     max_speed  shield
cobra      mark i           12       2
           mark ii           0       4
sidewinder mark i           10      20
           mark ii           1       4
viper      mark ii           7       1
           mark iii         16      36

Срез от кортежа индекса до кортежа индекса

>>> df.loc[('cobra', 'mark i'):('viper', 'mark ii')]
                    max_speed  shield
cobra      mark i          12       2
           mark ii          0       4
sidewinder mark i          10      20
           mark ii          1       4
viper      mark ii          7       1

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

© 2008–2022, 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/2.2.2/reference/api/pandas.DataFrame.loc.html

Spec-Zone.ru

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