Нужно отсортировать массив Numpy по значению столбца, но значение присутствует в формате String - PullRequest
0 голосов
/ 08 апреля 2019

Я новичок в python и мне нужно извлечь информацию из CSV-файла, содержащего данные о терроризме.

Мне нужно выделить 5 лучших городов Индии с максимальными потерями, где Casuality = Killed (указано в CSV) + Wounded (указано в CSV). Столбец города также указан в файле CSV.

Формат вывода должен быть, как показано ниже в порядке убывания случайности

city_1 пострадавший_1 city_2 пострадавший_2 city_3 пострадавший_3 city_4 casualty_4 city_5 casualty_5

Ссылка на CSV- https://ninjasdatascienceprod.s3.amazonaws.com/3571/terrorismData.csv?AWSAccessKeyId=AKIAIGEP3IQJKTNSRVMQ&Expires=1554719430&Signature=7uYCQ6pAb1xxPJhI%2FAfYeedUcdA%3D&response-content-disposition=attachment%3B%20filename%3DterrorismData.csv

import numpy as np
import csv
file_obj=open("terrorismData.csv",encoding="utf8")
file_data=csv.DictReader(file_obj,skipinitialspace=True)
country=[]
killed=[]
wounded=[]
city=[]
final=[]

#Making lists
for row in file_data:
    if row['Country']=='India':
        country.append(row['Country'])
        killed.append(row['Killed'])
        wounded.append(row['Wounded'])
        city.append(row['City'])
        final.append([row['City'],row['Killed'],row['Wounded']])


#Making numpy arrays out of lists
np_month=np.array(country)
np_killed=np.array(killed)
np_wounded=np.array(wounded)
np_city=np.array(city)
np_final=np.array(final)


#Fixing blank values in final arr
for i in range(len(np_final)):
    for j in range(len(np_final[0])):
        if np_final[i][j]=='':
            np_final[i][j]='0.0'


#Counting casualities(killed+wounded) and storing in 1st column of final array
for i in range(len(np_final)):
    np_final[i,1]=float(np_final[i,1])+float(np_final[i,2])

#Descending sort on casualities column
np_final=np_final[np_final[:,1].argsort()[::-1]]

Я ожидаю, что np_final будет отсортирован по случайности столбцов, но это не происходит, потому что тип (случайности) приходит как 'String'

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 08 апреля 2019

Я бы предложил вам использовать Панд .Вам было бы легче манипулировать датой.Читать все в DataFrame.Он должен читать числа в числовых форматах.

Если вам нужно использовать np, при чтении данных вы можете просто привести ваши значения к числу с плавающей точкой или целому числу, и все должно работать, если других ошибок нет.Как то так:

for row in file_data:
if row['Country']=='India':
    country.append(row['Country'])
    killed.append(int(row['Killed']))
    wounded.append(int(row['Wounded']))
    city.append(row['City'])
    final.append([row['City'],row['Killed'],row['Wounded']])
...