2017-11-11 28 views
4

シェープファイルをGeoDataFrameに読み込もうとしています。b'Recode from 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

誰も私を助けることができるだろう:データは、このWebページから入手した

私は2016年のリンクをダウンロードしましたか?ありがとうございました。

+0

完全なエラートレースを表示できますか? –

+0

@MarkRansomは、完全なエラー – Julien

+0

を@Julienに追加したので、他のデータと同じプロセスを実行しても問題ありません。この問題がこのデータセットにあることを示唆しているようです(エラーに基づいて、おそらくUTF-8に変換できなかった認識できない文字があります)。 – DarkCygnus

答えて

1

形状ファイルにFiona.open()呼び出しが失敗する原因となる非UTF文字が含まれているようです(geopandasはFionaを使用してファイルを開きます)。行った後

enter image description here

:私は、このエラーが(例えばQGISで)シェープファイルを開くことでした解決その後、save asを選択し、「UTF-8」などEncodingオプションを指定することをやった

これは、df = gpd.read_file("convertedShape.shp")を呼び出すときに何のエラーもありません。


QGISまたは類似を使用せずにこれを行うための別の方法は、読んで、(効果的に目的の形式への変換)、再びあなたのシェープファイルを保存することです。これはまた、変換後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'でインストールしました。最初の1つですが、Qリンクにはいくつかの選択肢があります(あなたがcondaを持っていれば最も簡単です)。私の答えが役に立つと願っています:) – DarkCygnus

+0

@Julienをサイドコメントとして、QGisに試してみてください(Openです)。通常、シェイプファイルとラスタが私たちの期待する方法(エンコーディング、等)を処理したり、読み込んだりする。 – DarkCygnus

関連する問題