国土数値情報から土地利用細分メッシュ(リンク内容)をダウンロードし、その中にある区分コードに応じた土地利用種別(リンク内容)をexcelにコピーした表を使い新規フィールドとして追加したシェープファイルを作ろうとしています。フィールドに種別を追加した後で新しいシェープファイルとして出力するという操作を最後に行いたいのですが、そこでエラーが発生してしまいファイルの出力ができず、対策方法が分からず困っております。
(一連の作業はjupyter notebook上で行っております。)
元の土地利用細分メッシュの文字コードはshift-jisで、出力はshift-jisとutf-8のどちらも試しました。
shift-jisで出力しようとしたときはSchemaErrorが出て、別のコードならいけるかもしれないと思いutf-8で出力しようとしたときはUnicodeDecodeErrorが出てしまいどちらでも不可能でした。
エラーコードを見るに元のシェープファイルのフィールド名'メッシュ'に何か問題があるようなのですが、それが何なのかわかっておりません。
以下に作成したコード、shift-jisで出力を試みた時のエラーコード、utf-8で出力を試みた時のエラーコードを記載いたします。
作成したコード
python
1import pandas as pd 2import geopandas as gpd 3import openpyxl 4 5df1 = gpd.read_file('C:\Users\ユーザー名\土地細分メッシュ\L03-b-16_5339-tky.shp', encoding='shift-jis') 6df1['土地利用種'] = df1['土地利用種'].apply(int) 7df1['メッシュ'] = df1['メッシュ'].apply(int) 8 9kubun = pd.read_excel('C:\Users\ユーザー名\土地細分メッシュ\区分.xlsx') 10kubun['コード'] = kubun['コード'].apply(int) 11 12df1_code = list(df1['土地利用種']) 13 14kubun_code = list(kubun['コード']) 15kubun_name = list(kubun['種別']) 16 17add_kubun = [] 18for i in df1_code: 19 add_kubun.append(kubun_code.index(i)) 20 21input_kubun = [] 22for s in add_kubun: 23 input_kubun.append(kubun_name[s]) 24 25df1.insert(2, '種別', input_kubun) 26 27df1.to_file('土地利用区分追加.shp', driver='ESRI Shapefile', encoding='shift-jis')
shift-jisで出力しようとしたときのエラーコード
python
1 2--------------------------------------------------------------------------- 3CPLE_AppDefinedError Traceback (most recent call last) 4fiona/ogrext.pyx in fiona.ogrext.WritingSession.start() 5 6fiona/_err.pyx in fiona._err.exc_wrap_int() 7 8CPLE_AppDefinedError: Failed to create field name 'メッシュ': cannot convert to shift-jis 9 10During handling of the above exception, another exception occurred: 11 12SchemaError Traceback (most recent call last) 13<ipython-input-4-79f9a8b84e47> in <module> 14 26 df1.insert(2, '種別', input_kubun) 15 27 16---> 28 df1.to_file('土地利用区分追加.shp', driver='ESRI Shapefile', encoding='shift-jis') 17 18C:\ProgramData\Anaconda3\lib\site-packages\geopandas\geodataframe.py in to_file(self, filename, driver, schema, **kwargs) 19 502 from geopandas.io.file import to_file 20 503 21--> 504 to_file(self, filename, driver, schema, **kwargs) 22 505 23 506 def to_crs(self, crs=None, epsg=None, inplace=False): 24 25C:\ProgramData\Anaconda3\lib\site-packages\geopandas\io\file.py in to_file(df, filename, driver, schema, **kwargs) 26 126 with fiona_env(): 27 127 with fiona.open( 28--> 128 filename, "w", driver=driver, crs=df.crs, schema=schema, **kwargs 29 129 ) as colxn: 30 130 colxn.writerecords(df.iterfeatures()) 31 32C:\ProgramData\Anaconda3\lib\site-packages\fiona\env.py in wrapper(*args, **kwargs) 33 394 def wrapper(*args, **kwargs): 34 395 if local._env: 35--> 396 return f(*args, **kwargs) 36 397 else: 37 398 if isinstance(args[0], str): 38 39C:\ProgramData\Anaconda3\lib\site-packages\fiona\__init__.py in open(fp, mode, driver, schema, crs, encoding, layer, vfs, enabled_drivers, crs_wkt, **kwargs) 40 261 c = Collection(path, mode, crs=crs, driver=driver, schema=this_schema, 41 262 encoding=encoding, layer=layer, enabled_drivers=enabled_drivers, crs_wkt=crs_wkt, 42--> 263 **kwargs) 43 264 else: 44 265 raise ValueError( 45 46C:\ProgramData\Anaconda3\lib\site-packages\fiona\collection.py in __init__(self, path, mode, driver, schema, crs, encoding, layer, vsi, archive, enabled_drivers, crs_wkt, ignore_fields, ignore_geometry, **kwargs) 47 160 elif self.mode in ('a', 'w'): 48 161 self.session = WritingSession() 49--> 162 self.session.start(self, **kwargs) 50 163 except IOError: 51 164 self.session = None 52 53fiona/ogrext.pyx in fiona.ogrext.WritingSession.start() 54 55SchemaError: Failed to create field name 'メッシュ': cannot convert to shift-jis 56
utf-8で出力しようとしたときのエラーコード
python
1 2--------------------------------------------------------------------------- 3UnicodeDecodeError Traceback (most recent call last) 4UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe3 in position 61: invalid continuation byte 5 6Exception ignored in: 'fiona._env.log_error' 7UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe3 in position 61: invalid continuation byte 8--------------------------------------------------------------------------- 9UnicodeDecodeError Traceback (most recent call last) 10UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe7 in position 64: invalid continuation byte 11 12Exception ignored in: 'fiona._env.log_error' 13UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe7 in position 64: invalid continuation byte 14--------------------------------------------------------------------------- 15UnicodeDecodeError Traceback (most recent call last) 16UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe6 in position 64: invalid continuation byte 17 18Exception ignored in: 'fiona._env.log_error' 19UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe6 in position 64: invalid continuation byte 20--------------------------------------------------------------------------- 21UnicodeDecodeError Traceback (most recent call last) 22<ipython-input-3-c48df3a82a00> in <module> 23 26 df1.insert(2, '種別', input_kubun) 24 27 25---> 28 df1.to_file('土地利用区分追加.shp', driver='ESRI Shapefile', encoding='utf-8') 26 27C:\ProgramData\Anaconda3\lib\site-packages\geopandas\geodataframe.py in to_file(self, filename, driver, schema, **kwargs) 28 502 from geopandas.io.file import to_file 29 503 30--> 504 to_file(self, filename, driver, schema, **kwargs) 31 505 32 506 def to_crs(self, crs=None, epsg=None, inplace=False): 33 34C:\ProgramData\Anaconda3\lib\site-packages\geopandas\io\file.py in to_file(df, filename, driver, schema, **kwargs) 35 126 with fiona_env(): 36 127 with fiona.open( 37--> 128 filename, "w", driver=driver, crs=df.crs, schema=schema, **kwargs 38 129 ) as colxn: 39 130 colxn.writerecords(df.iterfeatures()) 40 41C:\ProgramData\Anaconda3\lib\site-packages\fiona\env.py in wrapper(*args, **kwargs) 42 394 def wrapper(*args, **kwargs): 43 395 if local._env: 44--> 396 return f(*args, **kwargs) 45 397 else: 46 398 if isinstance(args[0], str): 47 48C:\ProgramData\Anaconda3\lib\site-packages\fiona\__init__.py in open(fp, mode, driver, schema, crs, encoding, layer, vfs, enabled_drivers, crs_wkt, **kwargs) 49 261 c = Collection(path, mode, crs=crs, driver=driver, schema=this_schema, 50 262 encoding=encoding, layer=layer, enabled_drivers=enabled_drivers, crs_wkt=crs_wkt, 51--> 263 **kwargs) 52 264 else: 53 265 raise ValueError( 54 55C:\ProgramData\Anaconda3\lib\site-packages\fiona\collection.py in __init__(self, path, mode, driver, schema, crs, encoding, layer, vsi, archive, enabled_drivers, crs_wkt, ignore_fields, ignore_geometry, **kwargs) 56 160 elif self.mode in ('a', 'w'): 57 161 self.session = WritingSession() 58--> 162 self.session.start(self, **kwargs) 59 163 except IOError: 60 164 self.session = None 61 62fiona/ogrext.pyx in fiona.ogrext.WritingSession.start() 63 64fiona/ogrext.pyx in fiona.ogrext.Session.get_schema() 65 66UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe3 in position 9: unexpected end of data 67

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/08 03:24
2020/07/08 03:57
2020/07/08 04:55
2020/07/08 09:10
2020/07/09 01:57 編集