#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