Страницы

Поиск по вопросам

воскресенье, 29 марта 2020 г.

Почему перезаписывается словарь?

#python


Из DataSet выбираю события, которые произошли 2015 году, и хочу записывать тип Primary
Type в словарь, чтобы через class Counter посмотреть самые популярные.
Как правильно добавлять в словарь, а не перезаписывать значения?

import csv
import re
import collections

a = {"Primary Type": set()}

with open("Crimes.csv") as f:
    reader = csv.reader(f)
    for smt in reader:
        if len(re.findall(r"\w+/\w+/2015\b", smt[2])) > 0:
            a["Primary Type"] = smt[5]
            print(a)

c = collections.Counter(a)
print(c.most_common(3))


Пример того что я получаю на выходе:

{'Primary Type': 'ASSAULT'}
{'Primary Type': 'DECEPTIVE PRACTICE'}
{'Primary Type': 'BURGLARY'}
{'Primary Type': 'DECEPTIVE PRACTICE'}
{'Primary Type': 'HOMICIDE'}
{'Primary Type': 'HOMICIDE'}
{'Primary Type': 'HOMICIDE'}
{'Primary Type': 'HOMICIDE'}
{'Primary Type': 'HOMICIDE'}
[('Primary Type', 'HOMICIDE')]  # тут я ожидаю получить HOMICIDE DECEPTIVE PRACTICE и тд.

    


Ответы

Ответ 1



Поправил, сделал так: import csv import re import collections m = [] with open("Crimes.csv") as f: reader = csv.reader(f) for smt in reader: if len(re.findall(r"\w+/\w+/2015\b", smt[2])) > 0: m.append(smt[5]) c = collections.Counter(m) print(c.most_common(3))

Ответ 2



Модуль Pandas гораздо лучше подходит для решение такого рода задач: import pandas as pd # читаем данные из CSV в Pandas DataFrame filename = r'D:\download\Chicago_Crimes_2012_to_2017.csv' df = pd.read_csv(filename, index_col=0) # фильтруем данные - оставляем только 2015 год df = df[df['Date'].str.contains('\d{2}/\d{2}/2015\s')] показываем top-5 наиболее часто встречающихся в выборке за 2015г. преступлений: print(df['Primary Type'].value_counts().head(5)) результат: THEFT 57292 BATTERY 48904 CRIMINAL DAMAGE 28669 NARCOTICS 23833 OTHER OFFENSE 17534 Name: Primary Type, dtype: int64 тоже самое в виде словаря: print(df['Primary Type'].value_counts().head(5).to_dict()) результат: {'THEFT': 57292, 'BATTERY': 48904, 'CRIMINAL DAMAGE': 28669, 'NARCOTICS': 23833, 'OTHER OFFENSE': 17534}

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

Отправить комментарий