Saya memiliki kerangka data geopdans yang memiliki kolom yang disebut "nilai". Saya memiliki kerangka data panda yang memiliki kolom yang disebut "nilai" juga. Nilai kolom dalam dua kerangka data tidak persis sama; Saya ingin bergabung dengan mereka berdasarkan nilai terdekat untuk bingkai data geopnadas.

Berikut adalah contoh minimum yang ingin saya capai, saya memiliki bingkai data geopadans dengan kolom "nilai":

   S_1_OBJECT    values  OBJECTID  Shape_Leng  Shape_Area  \
0      3541.0  325.5626         1    0.020833    0.000017   
1      3544.0  314.5491         2    0.029167    0.000026   
2      3545.0  551.1674         3    0.035000    0.000034   

                                            geometry  
0  POLYGON ((-115.6041666669581 50.96666666593393...  
1  (POLYGON ((-115.6 50.96666666593393, -115.6 50...  
2  (POLYGON ((-115.6 50.96249999897583, -115.6 50... 

Saya juga memiliki bingkai data panda yang memiliki kolom nilai, misalnya:

     values  color  
0    300.00  green     
1    500.00   blue    

Akhirnya, saya ingin memiliki bingkai data geopandas yang menautkan kolom warna ke nilai terdekat dari bingkai data geopandas:

   S_1_OBJECT    values  OBJECTID  Shape_Leng  Shape_Area  color\
0      3541.0  325.5626         1    0.020833    0.000017  green 
1      3544.0  314.5491         2    0.029167    0.000026  green
2      3545.0  551.1674         3    0.035000    0.000034   blue

                                            geometry  
0  POLYGON ((-115.6041666669581 50.96666666593393...  
1  (POLYGON ((-115.6 50.96666666593393, -115.6 50...  
2  (POLYGON ((-115.6 50.96249999897583, -115.6 50... 

Saya telah memeriksa gabungan untuk panda tetapi sepertinya tidak ada fungsi seperti itu. Saya juga sudah mencoba:

shp_out = pandas.merge_asof(geopandasdataframe, pandasdataframe, on='values', direction='nearest')

Tetapi kemudian saya tidak dapat mengonversi string shp_out ke json menggunakan shp_out.to_json()

0
Shervan Gharari 17 Maret 2020, 22:30

1 menjawab

Jawaban Terbaik

Masalah ini berasal dari pandas.merge_asof yang dilakukan pada geopadnas.GeoDataFrame. Ini berfungsi, tetapi pada GeoDataFrame yang dihasilkan tidak memiliki geometri yang ditetapkan yang kemudian merusak .to_json(). Anda cukup memperbaikinya dengan menentukan kolom geometri setelah merge_asof.

shp_out = shp_out.set_geometry('geometry')

Maka Anda seharusnya bisa mendapatkan geojson melalui shp_out.to_json().

EDIT: Ini juga kehilangan CRS, jadi saya akan merekomendasikan untuk mengaturnya kembali.

shp_out.crs = geopandasdataframe.crs
0
martinfleis 18 Maret 2020, 09:58