/
Вопросы и ответы
/
Аналитика данных
/

Как найти строку по значению pandas

Как найти строку по значению pandas

4 года назад

Arthur Cheremisin

Ответы

0

Для того чтобы найти строку в DataFrame по определенному значению, необходимо использовать методы библиотеки pandas.

Если нужно найти строку по значению в конкретном столбце, можно воспользоваться методом loc, указав условие в квадратных скобках. Например, для поиска строки, где значение столбца ""название"" равно ""значение"", можно использовать следующий код:

1
df.loc[df['название'] == 'значение']

Если требуется найти строку по значению в нескольких столбцах, можно воспользоваться методом query. Например, для поиска строки, где значение столбца ""название1"" равно ""значение1"" и значение столбца ""название2"" равно ""значение2"", можно использовать следующий код:

1
df.query(""название1 == 'значение1' and название2 == 'значение2'"")

Также можно использовать методы библиотеки pandas для более сложных запросов, например с использованием регулярных выражений или других функций.

Надеюсь, это поможет вам найти нужные строки в вашем DataFrame!"

2 года назад

Ivan Mamtsev

0

Строки с нужным значением выбирают логической маской:

1
2
3
4
5
6
7
8
9
10
11
12
import pandas as pd

df = pd.DataFrame({
    'name': ['Анна', 'Олег', 'Мария'],
    'city': ['Москва', 'Казань', 'Москва'],
    'age': [25, 31, 28],
})

print(df[df['city'] == 'Москва'])
#     name    city  age
# 0   Анна  Москва   25
# 2  Мария  Москва   28

df['city'] == 'Москва' даёт столбец True/False, а df[...] оставляет строки с True.

Через loc

1
df.loc[df['city'] == 'Москва', 'name']  # только столбец name

loc выбирает строки и столбцы сразу. Им же меняют значения в найденных строках: df.loc[df['age'] > 30, 'group'] = 'старше 30'.

Несколько условий

1
df[(df['city'] == 'Москва') & (df['age'] > 26)]

Каждое условие в скобках, «и» — &, «или» — |. Слова and и or здесь выдадут ошибку.

Значение из списка

1
df[df['city'].isin(['Москва', 'Казань'])]

Частичное совпадение

1
df[df['name'].str.contains('ан', case=False, na=False)]

na=False не даёт упасть на пропусках.

Через query

1
df.query('city == "Москва" and age > 26')

Читается как SQL. Переменную подставляют через @: df.query('age > @min_age').

Номер строки и одно значение

1
2
print(df.index[df['name'] == 'Олег'].tolist())  # [1]
print(df.loc[df['name'] == 'Олег', 'age'].iloc[0])  # 31

.iloc[0] берёт первое совпадение. Если совпадений нет, будет IndexError, поэтому сначала проверьте, что результат не пустой.

Значение в любом столбце

1
df[df.eq('Казань').any(axis=1)]

Фильтрацию данных в pandas разбирают в курсе «Python для анализа данных».

18 дней назад

Никита Вихров

+7 800 100 22 47

бесплатно по РФ

+7 495 085 21 62

бесплатно по Москве

108813 г. Москва, вн.тер.г. поселение Московский,
г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3
ОГРН 1217300010476
ИНН 7325174845