2017-11-11 36 views
4

셰이프 파일을 GeoDataFrame으로 읽으려고합니다.b'Recode ANSI 1252에서 UTF-8로 실패했습니다 : "잘못된 인수입니다." geopandas python

일반적으로 그냥 이렇게 그것은 작동합니다

import pandas as pd 

import geopandas as gpd 
from shapely.geometry import Point 

df = gpd.read_file("wild_fires/nbac_2016_r2_20170707_1114.shp") 

그러나이 시간은 나에게 오류 제공 : b'Recode from ANSI 1252 to UTF-8 failed with the error: "Invalid argument".'

전체 오류 :

--------------------------------------------------------------------------- 
CPLE_AppDefinedError      Traceback (most recent call last) 
<ipython-input-14-adcad0275d30> in <module>() 
----> 1 df_wildfires_2016 = gpd.read_file("wild_fires/nbac_2016_r2_20170707_1114.shp") 

/usr/local/lib/python3.6/site-packages/geopandas/io/file.py in read_file(filename, **kwargs) 
    19  """ 
    20  bbox = kwargs.pop('bbox', None) 
---> 21  with fiona.open(filename, **kwargs) as f: 
    22   crs = f.crs 
    23   if bbox is not None: 

/usr/local/lib/python3.6/site-packages/fiona/__init__.py in open(path, mode, driver, schema, crs, encoding, layer, vfs, enabled_drivers, crs_wkt) 
    163   c = Collection(path, mode, driver=driver, encoding=encoding, 
    164      layer=layer, vsi=vsi, archive=archive, 
--> 165      enabled_drivers=enabled_drivers) 
    166  elif mode == 'w': 
    167   if schema: 

/usr/local/lib/python3.6/site-packages/fiona/collection.py in __init__(self, path, mode, driver, schema, crs, encoding, layer, vsi, archive, enabled_drivers, crs_wkt, **kwargs) 
    151    if self.mode == 'r': 
    152     self.session = Session() 
--> 153     self.session.start(self) 
    154    elif self.mode in ('a', 'w'): 
    155     self.session = WritingSession() 

fiona/ogrext.pyx in fiona.ogrext.Session.start (fiona/ogrext2.c:8432)() 

fiona/_err.pyx in fiona._err.GDALErrCtxManager.__exit__ (fiona/_err.c:1861)() 

CPLE_AppDefinedError: b'Recode from ANSI 1252 to UTF-8 failed with the error: "Invalid argument".' 

내가하려고했습니다를 내가 왜 잠시 동안 오류가 나고 있는지 알아 내라. 그러나 대답을 찾을 수없는 것 같다. http://cwfis.cfs.nrcan.gc.ca/datamart/download/nbac?token=78e9bd6af67f71204e18cb6fa4e47515

아무도 나를 도울 수 있을까 :

데이터

내가 만 2016 링크를 다운로드이 웹 페이지로부터 얻은 것? 고맙습니다.

+0

전체 오류 추적을 제공 할 수 있습니까? –

+0

@ MarkRansom이 방금 전 오류 – Julien

+0

을 추가했습니다. 다른 데이터와 동일한 프로세스를 수행 했으므로 잘 작동합니까? 이 데이터 세트에 문제가 있음을 제안하는 것으로 보입니다 (오류를 기반으로 UTF-8로 변환하지 못한 문자가 인식되지 않을 수 있음) – DarkCygnus

답변

1

모양 파일에 Fiona.open() 호출이 실패하는 UTF가 아닌 문자가 포함 된 것 같습니다 (geopandas는 Fiona를 사용하여 파일을 엽니 다).

내가 해결이 오류는 다음 save as을 선택하고 "UTF-8"로 Encoding 옵션을 지정 (예 : QGIS로) Shape 파일을 열 것을 무슨 짓을 :

enter image description here

수행 한 후 이 경우 df = gpd.read_file("convertedShape.shp")에 전화 할 때 오류가 없습니다.


QGIS 또는 유사한을 사용하지 않고이 작업을 수행하는 또 다른 방법은, 읽고 (효과적으로 원하는 형식으로 변환) 다시 Shape 파일을 저장하는 것입니다. 이것은 또한 변환 후 df = gpd.read_file("convertedShape.shp")에 성공적으로 개방 활성화

from osgeo import ogr 

driver = ogr.GetDriverByName("ESRI Shapefile") 
ds = driver.Open("nbac_2016_r2_20170707_1114.shp", 0) #open your shapefile 
#get its layer 
layer = ds.GetLayer() 

#create new shapefile to convert 
ds2 = driver.CreateDataSource('convertedShape.shp') 
#create a Polygon layer, as the one your Shapefile has 
layer2 = ds2.CreateLayer('', None, ogr.wkbPolygon) 
#iterate over all features of your original shapefile 
for feature in layer: 
    #and create a new feature on your converted shapefile with those features 
    layer2.CreateFeature(feature) 

ds = layer = ds2 = layer2 = None 

: OGR으로 당신은 이런 식으로 뭔가를 할 수 있습니다. 희망이 도움이됩니다.

+0

감사합니다! 나는 QGis가 없다. osgeo 설치 pip 시도했지만 작동하지 않는 것. 어떻게 내가 그쪽으로 라이브러리를 다운로드 할 수있는 아이디어? – Julien

+0

@Julien 몇 가지 옵션이 제공됩니다 (https://gis.stackexchange.com/questions/9553/installing-gdal-and-ogr-for-python).나는 * apt-get install python-gdal로 설치하거나'pip install GDAL'을 사용하여 설치했다. 가장 가능성있는 첫 번째 설치이지만 Q linked는 몇 가지 대안이있다. 희망은 내 대답은 유용했다 :) – DarkCygnus

+0

@Julien 사이드 코멘트로, 나는 당신이 QGis 시도 (그것은 공개), 일반적으로 항상 shapefiles 및 rasters 우리가 기대하는 방식으로 검사하는 편리하게 제공하는 (인코딩, 특성, 등)을 처리하거나 읽습니다. – DarkCygnus