本文介绍了b'从ANSI 1252重新编码为UTF-8失败,并显示错误:“无效参数". Geopandas蟒蛇的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将shapefile读取到GeoDataFrame中.

I am trying to read in a shapefile into a GeoDataFrame.

通常我只是这样做,它可以工作:

Normally I just do this and it works:

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".'

But this time it gives me the error: 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".'

我一直在试图弄清楚为什么一段时间以来我仍然收到错误,但似乎找不到答案.

I've been trying to figure out why I am getting the error for a while but can't seem to find the answer.

数据是从此网页获得的,我仅下载了2016年链接: http://cwfis.cfs.nrcan.gc.ca/datamart/download/nbac?token=78e9bd6af67f71204e18cb6fa4e47515

The data was obtained from this webpage I downloaded only the 2016 link: http://cwfis.cfs.nrcan.gc.ca/datamart/download/nbac?token=78e9bd6af67f71204e18cb6fa4e47515

有人可以帮助我吗?谢谢你.

Would anybody be able to help me? Thank you.

推荐答案

似乎您的shapefile包含导致Fiona.open()调用失败的非UTF字符(geopandas使用Fiona打开文件).

Seems that your shapefile contains non-UTF characters that causes the Fiona.open() call to fail (geopandas uses Fiona to open files).

我解决该错误的方法是打开Shapefile(例如,使用QGis),然后选择save as,然后将Encoding选项指定为"UTF-8":

What I did that solved this error was to open the Shapefile (with QGis for example), then selecting save as, and specifying the Encoding option as "UTF-8":

完成此操作后,调用df = gpd.read_file("convertedShape.shp")时没有错误.

After doing this, I got no error when calling df = gpd.read_file("convertedShape.shp").

另一种无需使用QGis或类似方法的方法是再次读取并保存Shapefile(有效地转换为所需的格式).使用OGR,您可以执行以下操作:

Another way to do this without having to use QGis or similar, is to read and save your Shapefile again (effectively converting to the desired format). With OGR you can do something like this:

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

这也使您可以在转换后使用df = gpd.read_file("convertedShape.shp")成功打开.希望这会有所帮助.

This also enabled to successfully open with df = gpd.read_file("convertedShape.shp") after conversion. Hope this helps.

这篇关于b'从ANSI 1252重新编码为UTF-8失败,并显示错误:“无效参数". Geopandas蟒蛇的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-11 02:15