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 8Index (то же поведение, что и
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