Я не получаю никакого изменения цвета на моей выходной карте даже после того, как хороплет связан с гео_данные, а фрейм данных связан с параметром данных в методе хороплет.
Я правильно указал параметр "key_on" и параметр "столбцы". Я удалил все значения NULL из Dataframe.
import pandas as pd
from pandas import read_csv
import folium
import os
import webbrowser
crimes = read_csv('Dataframe.csv',error_bad_lines=False)
vis = os.path.join('Community_Areas.geojson')
m = folium.Map(location = [41.878113, -87.629799], zoom_start = 10, tiles = "cartodbpositron")
m.choropleth(geo_data=vis, data = crimes, columns = ['Community Area', 'count'], fill_color = 'YlGn', key_on = 'feature.properties.area_numbe')
folium.LayerControl().add_to(m)
m.save('map.html')
webbrowser.open(filepath)
Я ожидал цветную картограмму, но на самом деле вывод был полностью серым. Я добавлю код, данные, вывод по ссылке ниже.
Ссылка на код:https://github.com/rahul0070/Stackoverflow_question_data
,Community Area,count
0,25.0,92679
1,8.0,48751
2,43.0,47731
3,23.0,45943
4,29.0,44819
5,28.0,42243
6,71.0,40624
7,67.0,40157
8,24.0,39680
9,32.0,38513
10,49.0,37227
11,68.0,37023
12,69.0,35874
13,66.0,33877
14,44.0,32256
15,6.0,31043
16,26.0,30565
17,27.0,28113
18,61.0,27362
19,22.0,27329
20,46.0,26897
21,19.0,26198
22,30.0,24362
23,53.0,22645
24,42.0,21284
25,7.0,21047
26,1.0,19932
27,3.0,19799
28,15.0,17820
29,38.0,17660
30,2.0,17213
31,73.0,17071
32,16.0,15926
33,40.0,14943
34,58.0,14143
35,31.0,13934
36,63.0,13203
37,70.0,12980
38,35.0,12965
39,14.0,12714
40,77.0,12612
41,21.0,12587
42,75.0,11156
43,65.0,10812
44,51.0,10348
45,56.0,10176
46,4.0,9984
47,33.0,8987
48,60.0,8982
49,76.0,8938
50,20.0,8922
51,17.0,8536
52,41.0,8076
53,48.0,7823
54,5.0,7761
55,45.0,7485
56,39.0,7466
57,52.0,7150
58,54.0,6777
59,10.0,6372
60,11.0,6072
61,34.0,6053
62,62.0,5736
63,50.0,5730
64,59.0,5695
65,57.0,5244
66,64.0,5194
67,72.0,4962
68,37.0,4908
69,13.0,4570
70,36.0,3359
71,74.0,3145
72,55.0,3109
73,18.0,3109
74,12.0,2454
75,47.0,2144
76,9.0,1386
Я попробовал это решение, но .0 не пошел. Я даже пытался использовать метод интервал().
Вы используете Excel для редактирования файлов csv? Excel довольно непредсказуем, он может преобразовывать текст в число, число в текст и т. д. Вы можете открыть csv в блокноте (поскольку этот файл очень маленький) и выполнить поиск и замену.
Нет, я использовал функцию Python int().
Прочитав данные, я обнаружил, что вы не преобразовали тип данных столбца области сообщества в строковый тип, поскольку файл geojson содержит ключ в виде строки. Таким образом, тип данных ключа и столбца должен совпадать.
Вот полноценное решение вашего ответа
# importing libraries
import pandas as pd
from pandas import read_csv
import folium
import os
import webbrowser
# read the data
crimes = read_csv('Dataframe.csv',error_bad_lines=False)
# convert float to int then to string
crimes['Community Area'] = crimes['Community Area'].astype('int').astype('str')
# choropleth map
vis = 'Community_Areas.geojson'
m = folium.Map(location = [41.878113, -87.629799], zoom_start = 10, tiles = "cartodbpositron")
m.choropleth(geo_data=vis, data = crimes, columns = ['Community Area', 'count'], fill_color = 'YlGn', key_on = 'feature.properties.area_num_1')
folium.LayerControl().add_to(m)
m.save('map.html')
webbrowser.open('map.html')
Пожалуйста, прокомментируйте, если вам трудно понять какую-либо часть кода. Для параметра key_on вы также можете попробовать feature.properties.area_numbe
Большое спасибо, решение сработало! Но у меня есть одно сомнение. На самом деле я пытался преобразовать тип столбца, как вы сказали, но он не преобразовывался. Я пытался использовать тип при чтении CSV-файла, я также пробовал повторять каждую переменную с помощью цикла for и преобразовывать каждый элемент с помощью метода ул(). Если у вас есть какие-либо идеи о том, почему мои методы не сработали, дайте мне знать. @Химаньшу
попробуйте удалить кавычки для str и int. Какую ошибку вы получали, когда пытались это сделать? Также укажите версию панд, которую вы используете.
Версия панд: 0.24.2. Я не получил никакой ошибки, тип данных просто не изменился бы. Я даже использовал следующий код: df['столбец'] = df['столбец'].astype('str') , но получил тот же результат
попробуйте удалить кавычки или, в качестве альтернативы, вы можете использовать функцию pandas df['column'].apply
Номера площадей в CSV имеют десятичное число (35,0). В файле json числа являются текстом. Я бы нашел и заменил в CSV и избавился от '.0's. И при загрузке csv вы можете добавить
dtype = {1:str}