Поиск определенных элементов в фрейме данных

#database #dataframe

#База данных #фрейм данных

Вопрос:

Я прикрепил изображение фрейма данных, с которым я работаю.

Это список мест в Торонто с их соответствующим районом.

Мне нужно выполнить итерацию по этому фрейму данных и выполнить поиск конкретных типов мест. Например, я хотел бы выполнить поиск по количеству аптек в определенном районе, а затем вернуть общее количество аптек.

Я также хотел бы выполнить поиск библиотек и просто вернуть 1 или 0 (1, если в нем есть 1 или более библиотек, 0, если в нем нет библиотек).

Кто-нибудь знает, как это сделать?

введите описание изображения здесь

Комментарии:

1. Какой язык вы знаете?

2. Я использую pandas в python

Ответ №1:

Ваша задача может быть решена с использованием только базовых функций Pandas, без повторного чтения вашего фрейма данных (как предлагается в другом ответе).

Определите функцию:

 def VenueNo(df, neigh, categ):
    return df.query('Neighborhood == @neigh and `Venue Category` == @categ').index.size
  

Затем вы можете, например, проверить, сколько пулов имеется в Parkwoods
запуск по соседству:

 VenueNo(df, 'Parkwoods', 'Pool')
  

и (для вашего образца данных) результат будет 1.

Я поместил параметры в эту функцию для передачи всей необходимой информации, но если вы предпочитаете полагаться на глобальные переменные, вы можете, например, опустить параметр df, и тогда эта функция будет выглядеть только в одном конкретном фрейме данных.

Редактировать

Я заметил, что вы хотите получить ответ «0 или 1».

Чтобы получить это, определите другую функцию:

 def VenuePresent(df, neigh, categ):
    return 1 if df.query('Neighborhood == @neigh and `Venue Category` == @categ')
        .index.size > 0 else 0
  

Затем, чтобы протестировать его, запустите:

 VenuePresent(df, 'Parkwoods', 'Hockey Arena')
  

и вы получите 0, потому что в Парквудсе нет хоккейных арен
окрестности.

Если вы хотите иметь возможность искать много категорий одновременно, измените == @categ в функции на in @categ , но тогда:

  • вызовите эту функцию с помощью categ в виде списка «разыскиваемых» категорий,
  • если вы хотите найти одну категорию, передайте также список, содержащий только эту категорию

Комментарии:

1. Спасибо! Это очень просто и делает именно то, что мне нужно. Действительно ценю помощь!

2. Смогу ли я запустить это для проверки более чем одного типа места проведения одновременно? Например, проверить наличие ресторанов, но также проверить наличие банков и вернуть общее количество ресторанов банков?

Ответ №2:

 import pandas as pd
import csv
from csv import writer
df = pd.read_csv('nameofcsvfile', delimiter=',')
def check(data):
    x = 0
    datainfield = False
    with open('nameofcsvfile', 'rt') as f:
     reader = csv.reader(f, delimiter=',')
     try:
         for row in reader:
             for field in row:
               if field == data:
                   print('1')
                   x  
                   datainfield = True
     if datainfield == False:
         print('0 results found')
     else:
         print('there are/is "   str(x)   ' results in the list')
     f.close()
  

Я только что написал это в середине урока, поэтому может быть несколько ошибок, но это должно сработать для проверки данных по файлу CSV