Pandas 데이터 프레임에서 shapefile을 만드시겠습니까?


12

lon & lat 행을 사용하여 Pandas Data Frame에서 shapefile을 만들고 싶습니다.

CSV 파일을 가지고 있으며 처리하기 쉬운 데이터 프레임을 만들기 위해 팬더로 처리합니다.

루프를 한 줄씩 만들지 않고도 그렇게 할 수 있습니까?


CSV 인 경우 ArcMap에서 XY 데이터 추가를 사용하여 레이어를 만든 다음 모양 파일로 내보내십시오 (rt- 클릭 레이어 및 데이터 선택, 데이터 내보내기)?
mkennedy

감사합니다.하지만 파이썬 스크립트를 만들고 싶습니다. GIS 불필요
kamome


아, 알았다 댓글을 삭제하겠습니다.
mkennedy 2016 년

답변:


17

조금 늦었지만 다른 사람들에게도 유용합니다. 예, shapely및 로 수행 할 수 있습니다 geopandas.

팬더 데이터 프레임 종류가 다음과 같다고 가정합니다.

import pandas as pd
data = [
        {'some_attribute': 'abc', 'lat': '50.1234', 'lon': '10.4023'},
        {'some_attribute': 'def', 'lat': '40.5678', 'lon': '8.3365'},
        {'some_attribute': 'ghi', 'lat': '60.9012', 'lon': '6.2541'},
        {'some_attribute': 'jkl', 'lat': '45.3456', 'lon': '12.5478'},
        {'some_attribute': 'mno', 'lat': '35.7890', 'lon': '14.3957'},
        ]

df = pd.DataFrame(data)
print(df)

=>

       lat      lon some_attribute
0  50.1234  10.4023            abc
1  40.5678   8.3365            def
2  60.9012   6.2541            ghi
3  45.3456  12.5478            jkl
4  35.7890  14.3957            mno

먼저, 있는지 확인 geopandas하고 shapely그들이 어떤 의존성 (예 : GEOS 및 GDAL)와 함께하기 때문에 때로는 쉬운 일이 아니다있는 제대로 설치됩니다. 처음에 시도해도 작동하지 않으면 pip install geopandas shapelyGoogle 또는 StackOverflow / Gis.Stackexchange에서 오류를 검색하십시오. 대부분 그 문제를 해결할 수있는 답변이있을 것입니다.

그런 다음 데이터 프레임에 위도 및 경도 값을 shapely Point()객체 로 결합하는 새 지오메트리 열을 만드는 것 입니다. 참고는 것을 Point()dataframe의 열 dtypes가 아직 설정되지 않은 경우 변환이 포함되어야하므로 생성자는, 부동 소수점 값의 튜플을 기대한다 float.

from shapely.geometry import Point

# combine lat and lon column to a shapely Point() object
df['geometry'] = df.apply(lambda x: Point((float(x.lon), float(x.lat))), axis=1)

이제 pandas DataFrame을로 변환하십시오 GeoDataFrame. geopandas 생성자는 형태가 좋은 지오메트리 객체로 구성 될 수있는 지오메트리 열을 예상하므로 생성 한 열은 괜찮습니다.

import geopandas
df = geopandas.GeoDataFrame(df, geometry='geometry')

모양 파일에이 GeoDataFrame를 덤프하기 위해 사용 geopandas ' to_file()방법 (다른 드라이버가 지원 피오나 와 같은 GeoJSON작업도해야한다) :

df.to_file('MyGeometries.shp', driver='ESRI Shapefile')

그리고 이것이 QGIS로 시각화 할 때 결과 모양 파일이 나타납니다 .

결과 shapefile


2
안녕하세요, 비슷한 상황이 있지만 점 대신 다각형이 있습니다. 비슷한 df [ 'geometry'] = df.apply (lambda x : Point ((float (x.lon), float (x.lat))), axis = 1)이지만 다각형으로 할 수 있습니까?
Valerio D. Ciotti

4

ArcMap의 경우 Shapefile로 내보내기 전에 투영을 정의해야합니다.

import geopandas
df = geopandas.GeoDataFrame(df, geometry='geometry')

# proj WGS84

df.crs= "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"

df.to_file('MyGeometries.shp', driver='ESRI Shapefile')

df.crs= "+init=epsg:27700"British National Grid에 따라 모양 파일을 투영 하는 데 사용하여 비슷한 작업을 수행 했습니다. 그러나 ArcGIS에서 열면 좌표계를 알 수 없습니다. 내가 뭘 잘못하고 있죠?
FaCoffee
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.