반응형
Notice
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 네트워크보안
- 딥러닝
- I'm Sorry
- 소프트웨어
- 인공지능
- 코딩
- 자바스크립트
- 소프트웨어공학
- 데이터과학
- 네트워크
- 데이터베이스
- 컴퓨터공학
- 빅데이터
- 보안
- 컴퓨터과학
- 자료구조
- 버전관리
- 머신러닝
- 파이썬
- 사이버보안
- 클라우드컴퓨팅
- 프로그래밍언어
- 데이터분석
- 컴퓨터비전
- Yes
- 알고리즘
- 프로그래밍
- 데이터구조
- 2
- 웹개발
Archives
- Today
- Total
스택큐힙리스트
지오판다 sjoin() 오류: 리스트 인덱스가 범위를 벗어났습니다. 본문
반응형
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-75-e5b042f3f0e2> in <module>
----> 1 return_gdf = gpd.sjoin(points_gdf, polys_gdf, how=inner, op='intersects')
~\AppData\Local\Continuum\anaconda3\lib\site-packages\geopandas\tools\sjoin.py in sjoin(left_df, right_df, how, op, lsuffix, rsuffix)
73 tree_idx = rtree.index.Index(stream)
74
---> 75 idxmatch = (left_df.geometry.apply(lambda x: x.bounds)
76 .apply(lambda x: list(tree_idx.intersection(x))))
77 idxmatch = idxmatch[idxmatch.apply(len) > 0]
~\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\series.py in apply(self, func, convert_dtype, args, **kwds)
3192 else:
3193 values = self.astype(object).values
-> 3194 mapped = lib.map_infer(values, f, convert=convert_dtype)
3195
3196 if len(mapped) and isinstance(mapped[0], Series):
pandas/_libs/src\inference.pyx in pandas._libs.lib.map_infer()
~\AppData\Local\Continuum\anaconda3\lib\site-packages\geopandas\tools\sjoin.py in <lambda>(x)
73 tree_idx = rtree.index.Index(stream)
74
---> 75 idxmatch = (left_df.geometry.apply(lambda x: x.bounds)
76 .apply(lambda x: list(tree_idx.intersection(x))))
77 idxmatch = idxmatch[idxmatch.apply(len) > 0]
~\AppData\Local\Continuum\anaconda3\lib\site-packages\shapely\geometry\point.py in bounds(self)
120 @property
121 def bounds(self):
--> 122 xy = self.coords[0]
123 return (xy[0], xy[1], xy[0], xy[1])
124
IndexError: list index out of range
나는 polys_gdf
를 두 부분으로 나누려고 시도했다. 하나는 다각형만 포함하고 다른 하나는 멀티폴리곤만을 포함하도록. 하지만 같은 오류가 발생한다.
여기서 누가 도와줄 수 있을까?
오류를 재현하는 작동 코드:
import geopandas as gpd
from shapely.geometry import Point, Polygon
point_list = [Point(),Point(0.5,0.5)]
poly_list = [Polygon([[0, 0], [1, 0], [1, 1], [0, 1]])]
points_gdf = gpd.GeoDataFrame(geometry=point_list)
polys_gdf = gpd.GeoDataFrame(geometry=poly_list)
return_df = gpd.sjoin(points_gdf, polys_gdf, how=inner, op='within')
답변 1
포스팅 한 직후에 실수를 발견했습니다. point_gdf에 몇 개의 빈 shapely 점이 있었습니다. 이를 삭제한 후에 sjoin() 함수가 원활하게 작동합니다.
import geopandas as gpd
from shapely.geometry import Point, Polygon
point_list = [Point(),Point(0.5,0.5)]
poly_list = [Polygon([[0, 0], [1, 0], [1, 1], [0, 1]])]
points_gdf = gpd.GeoDataFrame(geometry=point_list)
polys_gdf = gpd.GeoDataFrame(geometry=poly_list)
points_gdf = points_gdf[~points_gdf.geometry.is_empty] # 빈 점 삭제
return_df = gpd.sjoin(points_gdf, polys_gdf, how=inner, op='within')
답변 2
지오판다스 sjoin() 오류: 리스트 인덱스가 범위를 벗어납니다지오판다스는 지리 공간 데이터 처리를 위한 파이썬 패키지입니다. sjoin()은 지오판다스에서 제공하는 함수 중 하나로, 공간 연결(join) 작업을 수행할 때 사용됩니다. 그러나 가끔씩 sjoin() 함수를 사용할 때 list index out of range라는 오류 메시지를 마주할 수 있습니다. 이 오류가 발생하는 이유와 해결 방법에 대해 알아보겠습니다.
이 오류 메시지는 리스트 인덱싱에서 범위를 벗어난 경우 발생하는 것으로, 일반적으로 두 가지 주요 이유로 인해 발생합니다. 첫 번째로, 지오판다스 패키지 버전과 호환되지 않는 다른 패키지를 사용할 때이며, 두 번째로, 데이터프레임 내에 유효하지 않은 값이 있는 경우입니다.
문제를 해결하기 위해 해야 할 첫 번째 단계는 지오판다스 버전을 확인하는 것입니다. 일반적으로 업데이트된 버전을 사용하는 것이 가장 좋습니다. 지오판다스 및 관련 패키지를 최신 버전으로 업데이트하면 일반적으로 오류가 해결됩니다. 따라서 오류 메시지를 받았다면 먼저 패키지를 최신 버전으로 업데이트하고 다시 시도해 보시기 바랍니다.
두 번째로, 데이터프레임 내에 유효하지 않은 값이 있는지 확인해야 합니다. 이를 확인하기 위해 데이터프레임의 모든 열을 조사하고 유효한 값의 범위 내에 있는지 확인하는 것이 중요합니다. 데이터프레임에서 범위를 벗어난 값이 있다면, 해당 값을 수정하거나 제거하여 문제를 해결할 수 있습니다.
이러한 오류에 직면한 경우 해결 방법은 크게 두 가지로 요약할 수 있습니다. 첫 번째로, 패키지를 업데이트하여 버그가 수정된 최신 버전을 사용하는 것입니다. 두 번째로, 데이터프레임 내의 유효하지 않은 값을 수정하거나 제거하여 오류를 해결하는 것입니다.
이에 따라, 지오판다스 sjoin() 오류 list index out of range에 대한 이해와 해결 방법을 설명해드렸습니다. 진행 중인 작업을 선택한 함수와 일치하도록 패키지 버전을 업데이트하고, 데이터프레임 내에 유효하지 않은 값이 있는지 확인해야 합니다. 이를 수행하면 오류가 해결되고 지오판다스를 효과적으로 사용할 수 있습니다.
반응형
Comments