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

Я импортирую панд и читаю CSV-файл.

import pandas as pd

df = pd.read_csv(r'C:\Users\Me\MyFile.csv')

Я конвертирую фрейм данных в строки и делаю содержимое строчными буквами.

df_low = df.apply(lambda x: x.astype(str).str.lower() if (x.dytpe == 'object'_ else x)

Я использую пользовательский ввод для поиска строк

searchterm = str(input("Enter search term: ").lower())

цикл по кадру данных и создание маски, а затем возврат только непустых результатов. В настоящее время я использую команду .upper только из-за того, что «Номер позиции» имеет 3 заглавные буквы в начале, но, конечно, это делает весь выходной капитал, но это работоспособно.

for item in df_low:
    mask = df_low[item].str.contains(searchterm)
    df_mask = pd.DataFrame(df_low[mask])
    if not df_mask.empty:
        print(df_mask[['Item Number', 'User Name', 'Short Description']].to_string(index=false).upper())

если df содержит следующее:

Номер предмета Имя пользователя Краткое описание Комментарии ИТМ-1 Леонардо слова и прочее я написал слова ИТМ-2 Донателло парень и слова Н/Д ИТМ-3 Откровенный Список технологий Стек технологий

Ожидаемый результат при поиске термина «технология»:

Номер предмета Имя пользователя Краткое описание ИТМ-3 ОТКРОВЕННЫЙ СПИСОК ТЕХНОЛОГИЙ

Из-за цикла фактический результат будет следующим, поскольку поисковый запрос находится как в полях «Краткое описание», так и в полях «Комментарии»:

Номер предмета Имя пользователя Краткое описание ИТМ-3 ОТКРОВЕННЫЙ СПИСОК ТЕХНОЛОГИЙ
Номер предмета Имя пользователя Краткое описание ИТМ-3 ОТКРОВЕННЫЙ СПИСОК ТЕХНОЛОГИЙ

Я попробовал несколько вариантов .drop_duplicates, но знаю достаточно, чтобы знать, что не знаю, как это использовать, потому что у меня ограниченное понимание того, где это будет в общем коде.

(x.dytpe == 'object'_ - Исправьте, пожалуйста, опечатки.
wjandrea 07.07.2024 20:48
str(input()) является избыточным, поскольку input() возвращает строку. Избавьтесь от звонка str.
wjandrea 07.07.2024 20:48

Колонка Long Description кажется неактуальной и просто занимает место. Пожалуйста, удалите его. Для справки см. Минимальный воспроизводимый пример и Как сделать хорошие воспроизводимые примеры панд.

wjandrea 07.07.2024 20:49
pd.DataFrame(df_low[mask]) является избыточным, поскольку df_low[mask] уже является df. Избавьтесь от звонка pd.DataFrame.
wjandrea 07.07.2024 20:50

Все это форматирование вывода не имеет отношения к проблеме, и на первый взгляд меня смутило то, что в выводе «технология» присутствует только один раз в строке. Просто сделайте print(df_mask).

wjandrea 07.07.2024 20:52

«В настоящее время я использую команду .upper только потому, что «Номер элемента» имеет 3 заглавные буквы в начале». Если вам нужна исходная заглавная буква, примените маску к df вместо df_low: df_mask = df[mask]

wjandrea 07.07.2024 21:00

Обратите внимание на pandas «без учета регистра» в строке или «игнорировать регистр». Во-первых, вам не нужно конвертировать в нижний регистр.

wjandrea 07.07.2024 21:15
1
8
71
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вместо цикла вы можете использовать applymap для фильтрации строк, в любом столбце которых есть searchterm:

searchterm = "Technology"

out = df[
    df.applymap(lambda x: isinstance(x, str) and searchterm.lower() in x.lower())
    .any(axis=1)
]
out = out[["Item Number", "User Name", "Short Description"]]
  Item Number User Name Short Description
2       ITM-3     Frank   Technology list

Большое спасибо @e-motta. Я совершенно не знаком с тем, как работают лямбда-функции, поэтому поработаю над этим еще немного. Я ценю ваш ответ, и он сработал так, как задумано. Еще раз спасибо.

Matt 03.07.2024 19:38

Другие вопросы по теме

Как применить результат функции Python к новому столбцу в фрейме данных Polars
Почему преобразование вложенного словаря Python в фрейм данных pandas приводит к ошибке «не имеет атрибута 'items'»?
Можем ли мы получить записи из тиббла, используя индексную матрицу?
Применить функцию к двум столбцам pandas и назначить их обратно исходному фрейму данных, что вызовет предупреждение в будущем
Странное поведение при обновлении значений с использованием iloc в фрейме данных pandas
Суммирование строк в DataFrame Pandas, где количество суммируемых строк основано на значениях столбцов в другом DataFrame
Гистограмма с накоплением с использованием matplotlib и pandas dataframe
Есть ли название для этого типа структурированных данных и как его более эффективно использовать?
Применить функцию возврата списка ко всем строкам в DataFrame pandas
Запись нескольких кадров данных в один файл Excel в R

Похожие вопросы

Python pandas-market-календари
Почему преобразование вложенного словаря Python в фрейм данных pandas приводит к ошибке «не имеет атрибута 'items'»?
Как заменить определенное поле внутри строки JSON в каждой строке файла csv в Python случайным значением?
Как создать иерархическую карту цветов в matplotlib?
Расширенная логика с группировкой, применением и преобразованием - сравнение значения строки с предыдущим значением и создание нового столбца
Каков самый быстрый способ расчета ежедневного баланса со сложными процентами в Pandas или Spark?
Я выбрал два столбца в объекте groupby. Как применить фильтр true или false к одному, а затем применить функцию к другому?
Выявляйте и отмечайте дубликаты, каждый из которых имеет определенное качество
Чтение CSV-файла с помощью Pandas в рабочей области Databricks
Применить функцию к двум столбцам pandas и назначить их обратно исходному фрейму данных, что вызовет предупреждение в будущем