#python #csv #count
#python #csv #количество
Вопрос:
Мне нужно подсчитать количество вхождений в строке из файла csv. Я использую файл, который подсчитывает, сколько преступлений было совершено beat за определенный месяц. Есть 20 битов [1A, 1B, 1C ….] и так далее. Я уже использовал эту настройку для подсчета целых чисел в диапазоне, но по какой-то причине я зависаю, пытаясь заставить его вычислить, содержит ли он число и букву. Есть предложения?
import csv
#import matplotlib.pyplot as plt
filename = "crime.csv"
with open(filename) as file:
data_from_file = csv.reader(file)
header_row = next(data_from_file)
ucr_ncic_code = [0,0,0,0,0,0,0,0,0]
for row in data_from_file:
crime = int(float(row[6]))
if crime in range(0,999):
ucr_ncic_code[0] = ucr_ncic_code[0] 1
elif crime in range(1000,1999):
ucr_ncic_code[1] = ucr_ncic_code[1] 1
elif crime in range(2000,2999):
ucr_ncic_code[2] = ucr_ncic_code[2] 1
elif crime in range(3000,3999):
ucr_ncic_code[3] = ucr_ncic_code[3] 1
elif crime in range(4000,4999):
ucr_ncic_code[4] = ucr_ncic_code[4] 1
elif crime in range(5000,5999):
ucr_ncic_code[5] = ucr_ncic_code[5] 1
elif crime in range(6000,6999):
ucr_ncic_code[6] = ucr_ncic_code[6] 1
elif crime in range(7000,7999):
ucr_ncic_code[7] = ucr_ncic_code[7] 1
elif crime in range(8000,8999):
ucr_ncic_code[8] = ucr_ncic_code[8] 1
with open(filename) as file:
data_from_file = csv.reader(file)
header_row = next(data_from_file)
district = [0,0,0,0,0,0,0]
for row in data_from_file:
D = int(float(row[2]))
if D in range(2):
district[0] = district[0] 1
elif D in range(3):
district[1] = district[1] 1
elif D in range(4):
district[2] = district[2] 1
elif D in range(5):
district[3] = district[3] 1
elif D in range(6):
district[4] = district[4] 1
elif D in range(7):
district[5] = district[5] 1
with open(filename) as file:
data_from_file = csv.reader(file)
header_row = next(data_from_file)
beat = [0,0,0,0,0,0,0]
for row in data_from_file:
B = str(row[3])
if B == "1A":
beat[0] = beat[0] 1
elif B in range(3):
beat[1] = beat[1] 1
elif B in range(4):
beat[2] = beat[2] 1
elif B in range(5):
beat[3] = beat[3] 1
elif B in range(6):
beat[4] = beat[4] 1
elif B in range(7):
beat[5] = beat[5] 1
def option1():
print("nNCIC Codes")
print(" 0-999:",ucr_ncic_code[0])
print("1000-1999:",ucr_ncic_code[1])
print("2000-2999:",ucr_ncic_code[2])
print("3000-3999:",ucr_ncic_code[3])
print("4000-4999:",ucr_ncic_code[4])
print("5000-5999:",ucr_ncic_code[5])
print("6000-6999:",ucr_ncic_code[6])
print("7000-7999:",ucr_ncic_code[7])
print("8000-8999:",ucr_ncic_code[8])
print("nDistricts")
print("District 1:",district[0])
print("District 2:",district[1])
print("District 3:",district[2])
print("District 4:",district[3])
print("District 5:",district[4])
print("District 6:",district[5])
print("nBeats")
print("Beat 1A:",beat[0])
def main():
cont = "y"
while(cont =="y"):
print("nttMENU")
print("1: Display Crime Report Data")
print("2: Crime Statistics by Specific Beat")
print("3: Compare Beat Statistics")
print("4: Quit")
print("nSelect an option above:")
user_input = input("---> ")
if (user_input == "1"):
option1()
#elif (user_input == "2"):
elif (user_input == "4"):
break
main()
Комментарии:
1. Если вы распечатываете
row
, является ли его содержимое тем, что вы ожидали?2. Результат равен 0, и есть сотни результатов.
3. Итак, это, по крайней мере, объясняет, почему тест всегда завершается неудачей. Если вы видите другие данные, чем в том файле, который вы читаете, должно быть, что-то не так с вашим кодом для чтения файла.
4. Все еще очень новый; Я не понимаю, что вы имеете в виду, что он терпит неудачу, даже если это приводит к 0. Я загрузил весь свой код, который я должен показать, на случай, если что-то еще, что у меня может быть причиной проблемы. Я попытался загрузить свой csv, но я тоже не вижу способа это сделать. Я ценю вашу помощь.
Ответ №1:
Я понял это; в csv, который мне дали, были дополнительные пробелы после такта 1A, поэтому мне пришлось удалить эти данные.