У меня есть фрейм данных пар широты и долготы, образующих многоугольник. Строки с GAP и NaN в столбцах lat / lon являются разделителями. Итак, в этом случае у меня есть 4 полигона с несколькими местоположениями по широте и долготе. Моя цель - отделить эти полигоны друг от друга, а затем построить график с использованием картографии.
0 1 2
0 POINT 87.6298 9.397332
1 POINT 87.8435 9.842206
2 POINT 87.2354 9.472004
4 GAP NaN NaN
5 POINT 87.8354 9.397332
6 POINT 87.9544 9.472004
7 POINT 87.9632 9.191509
8 POINT 87.6244 9.221509
9 POINT 87.4554 9.397332
10 GAP NaN NaN
11 POINT 87.6249 9.397332
12 POINT 87.7556 9.221509
13 POINT 87.5567 9.086767
14 POINT 87.3222 9.397332
15 GAP NaN NaN
16 POINT 87.6554 9.221509
17 POINT 87.9667 9.191509
18 POINT 87.8854 9.056767
19 POINT 87.4452 9.086767
Предположим, что при каждом запуске количество полигонов и количество пар широта / долгота в каждом многоугольнике может измениться .
Пример кода настройки ниже:
df = pd.read_excel(xl, sheet_name=0, header=None)
#change column names
df.rename(columns={1:'lon', 2:'lat'},inplace=True)
#replace GAP with nan so i can separate by group numbers with each line of nans (didnt work with 'GAP')
df.replace('GAP',np.nan, inplace=True)
df['group_no'] = df.isnull().all(axis=1).cumsum()
#define amount of unique numbers and put into list for looping
numbers = df['group_no'].unique()
aa = list(numbers)
Вот где я заблудился (область после настройки и перед построением кода), как показано ниже.
a_lon, a_lat = 87.8544, 8.721576
b_lon, b_lat = 87.6554, 8.585951
fig,ax = plt.subplots()
plt.figure(figsize=(10.6,6))
proj = ccrs.PlateCarree()
ax = plt.axes(projection=proj)
ax.stock_img()
ax.set_extent([90, 85, 7, 11], crs=ccrs.PlateCarree())
proj = ccrs.Geodetic()
plt.plot([a_lon, b_lon], [a_lat, b_lat], linewidth=1, color='blue', transform=proj)
#plt.show()
Итак, как вы видите, я заменил GAP на NaN, а затем разделил строки с помощью group_no, который является новым столбцом. Потом удалил Нан. Результирующий фрейм данных:
0 lon lat group_no
0 POINT 87.6298 9.397332 0
1 POINT 87.8435 9.842206 0
2 POINT 87.2354 9.472004 0
4 POINT 87.8354 9.397332 1
5 POINT 87.9544 9.472004 1
6 POINT 87.9632 9.191509 1
7 POINT 87.6244 9.221509 1
8 POINT 87.4554 9.397332 1
10 POINT 87.6249 9.397332 2
11 POINT 87.7556 9.221509 2
12 POINT 87.5567 9.086767 2
13 POINT 87.3222 9.397332 2
15 POINT 87.6554 9.221509 3
16 POINT 87.9667 9.191509 3
17 POINT 87.8854 9.056767 3
18 POINT 87.4452 9.086767 3
Я предпринял несколько попыток, но не могу закрыть сделку. Я пробовал разделить их в словаре с помощью group_by, ключ - это group_no, значения - пара lat / lon, но я недостаточно хорошо знаю словари, чтобы управлять ими и строить график для каждого «ключа».
Я также попытался разделить каждое на новый фрейм данных. Думая, что я могу l oop через и создать df0, df1, et c. а затем используйте a для l oop для построения графика, но я тоже не мог этого понять.
Любая помощь будет принята с благодарностью, и, пожалуйста, спросите, необходимы ли дополнительные сведения.