#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)?