Как мне запросить фрейм геоданных?

#python #pandas #geopandas

#python #pandas #геопанды

Вопрос:

У меня есть вопрос по Geopandas.

У меня есть файл формы для страны, который я загружаю в геопанды. Файл формы имеет форму для всех штатов в country.

Мне нужно извлечь одно состояние. Я пытался изучить документацию и stackoverflow, но не смог разобраться в том, как использовать query() метод для извлечения единого состояния.

 import geopandas as gpd
import os

# get current directory path
cur_dir = os.path.dirname(os.path.realpath(__file__))

gdf_shp_state = gpd.read_file(cur_dir   '/data/StateBoundary/StateBoundary.shp')
print(type(gdf_shp_state))
print(gdf_shp_state)
  

Вывод:

 <class 'geopandas.geodataframe.GeoDataFrame'>
                   state                                           geometry
0      ANDAMAN amp; NICOBAR  (POLYGON ((10341718.474 1449533.160500001, 103...
1             CHANDIGARH  POLYGON ((8546255.616099998 3606050.813100003,...
2   DADAR amp; NAGAR HAVELI  (POLYGON ((8137193.4859 2315664.964499999, 813...
3            DAMAN amp; DIU  (POLYGON ((8111624.4714 2328002.898499999, 811...
4                  DELHI  POLYGON ((8583390.569699999 3359116.190099999,...
5                HARYANA  POLYGON ((8524318.5392 3516490.864500001, 8524...
6              JHARKHAND  POLYGON ((9762288.284699999 2772949.712499999,...
  

Вопрос в следующем: как мне запросить фрейм геоданных?

Существует вызываемый метод, gdf_shp_state.query() и он ожидает, что я отправлю запрос в виде string . Может кто-нибудь помочь мне предоставить пример строки запроса, которую мне нужно использовать, чтобы получить фрейм геоданных для одного состояния?

Ответ №1:

фреймы геоданных работают так же, как обычные фреймы данных, поэтому запрос здесь может быть

 gdf_shp_state.query("state=='ANDAMAN amp; NICOBAR'")
  

Чтобы выбрать строку (ы), состояние которой равно 'ANDAMAN amp; NICOBAR'

Вышесказанное эквивалентно:

 gdf_shp_state[gdf_shp_state.state == 'ANDAMAN amp; NICOBAR']
  

Комментарии:

1. Две проблемы с этим ответом. Первый подход требует двойного равного размера ( == ). Второй должен использовать .loc средство доступа

2. @PaulH, спасибо, что заметили опечатку в подходе 1, но почему вы думаете, что во втором подходе нужно использовать .loc метод?

3. @HaleemurAli Я попробовал оба упомянутых подхода, и это работает как шарм.

4. @PaulH Я тоже пробовал gdf_shp_state.loc[gdf_shp_state.state == 'DELHI'] и это тоже работает.

5. @HaleemurAli потому что ваш метод может случайно захватить столбцы в зависимости от схемы фрейма данных. На самом деле, я думаю, что этот метод устарел. Использование .loc средства доступа является однозначным, позволяет вам одновременно выбирать столбцы и «поощряется» дальнейший путь с фреймами данных.