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

#pandas #dataframe #loops #csv #geopandas

Вопрос:

У меня возникли проблемы с записью фрейма данных GeoPandas в шейп-файл с помощью функции GeoDataFrame.to_file (). Когда я запускаю приведенный ниже код, иногда я получаю пустой шейп-файл, а иногда он запускается, но вообще ничего не возвращает.

 import arcpy import pandas as pd import glob import geopandas as gpd from shapely.geometry import Point   arcpy.env.overwriteOutput = True  arcpy.env.workspace = r'F:\GY539_Programming\project_data' ws = arcpy.env.workspace  files = glob.glob(ws   '/*.csv') for filename in files:  df = pd.read_csv(filename, sep=',')  geometry = [Point(xy) for xy in zip(df['Longitude'], df['Latitude'])]  gdf = gpd.GeoDataFrame(df, crs='EPSG:4326', geometry=geometry)  gdf.to_file('file.shp', driver='ESRI Shapefile')  

Есть какие-нибудь советы? Мои данные поступают из csv-файла, который содержит один столбец с координатами долготы, а другой-с координатами широты. Вот фрагмент этого:

 Api Permit ... Latitude Longitude 0 5.000000e 13 163019 ... 61.14 -149.98 1 5.000000e 13 100001 ... 61.21 -149.77 2 5.000000e 13 163015 ... 61.33 -149.91 3 5.000000e 13 165037 ... 61.30 -149.99 4 5.000000e 13 100002 ... 61.42 -149.81  

Большое спасибо!

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

1. Может быть, это files возвращает пустой список?

2. Также в каждой итерации цикла for вы сохраняете имя file.shp файла и, следовательно, перезаписываете файлы, сохраненные ранее, что означает, что в итоге у вас будет только один шейп-файл. Но я не думаю, что это было твоим намерением.

3. Спасибо за ваши комментарии! Я проверил файлы с помощью инструкции печати, и она действительно печатает список из нескольких файлов csv, которые я сохранил в папке.

4. Я знаю о проблеме перезаписи имени. Это то, чем я решил заняться в следующий раз.

5. Не могли бы вы, пожалуйста, проверить последний csv-файл в files переменной. Может быть, он пустой?

Ответ №1:

Спасибо за добавление файла с образцом. Дело в том, что если вы укажете относительный путь к файлу, как здесь

 gdf.to_file('file.shp', driver='ESRI Shapefile')  

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

 filepath = "C:/users/your/file/path" gdf.to_file(f"{filepath}/file.shp", driver='ESRI Shapefile')  

Это сработало для меня с вашими образцами данных. Я также мог бы проверить это, снова загрузив файл в виде ГеоДатаФрама, как это:

 gpd_df = gpd.read_file(f"{filepath}/file.shp")  

Надеюсь, это решит и вашу проблему.

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

1. Спасибо тебе, интедгар! К сожалению, это все еще не сработало для меня! После некоторых игр я думаю, что это проблема с crs. По какой-то причине crs из кадра геоданных не прикрепляется к выходному файлу. Когда я запускаю код, он создает выходной файл, но когда я открываю его в ArcPro, он не содержит никаких точек, и появляется ошибка «Неизвестная система координат». Странно то, что в новом шейп-файле действительно есть правильная таблица атрибутов! Интересно, может ли это быть ошибкой в моей версии geopandas (0.9.0)?