我有一个带有一列浮点值的GeoDataFrame,我想将它们转换为int值,然后覆盖shapefile。
web-www
此gdf包含一列float值,即float_column:
import numpy as np
import pandas as pd
import geopandas as gpd
gdf=gpd.read_file(r'.\folder\gdf.shp')
然后我应用转换:
gdf["float_column"]
0 1.307500e+12
1 1.307500e+12
2 1.307500e+12
3 1.307500e+12
4 1.307500e+12
5 1.307500e+12
6 1.307500e+12
7 1.307500e+12
8 1.307500e+12
9 1.307500e+12
具有以下值(正确转换):
gdf["int_column"]=[int(x) for x in gdf["float_column"]]
然后我保存gdf:
gdf["int_column"]
0 1307500192816
1 1307500170116
2 1307500012418
3 1307500152317
4 1307500141816
5 1307500093417
6 1307500055117
7 1307500081117
8 1307500107717
9 1307500096916
10 1307500213815
当我交叉检查结果时,int_column具有以下值:
gdf.to_file(r".\folder\gdf.shp",driver='ESRI Shapefile',crs_wkt=prj)
这似乎完全是疯了!我错过了一些非常愚蠢的事情吗?
答案 0 :(得分:1)
如注释中所述,此问题是由于int32
的限制所致。无法推断出正确的dtype,从而导致信息丢失。这应该通过即将发布的fiona
(geopandas
用于读取/写入文件)来解决,这将改善int
类型的处理方式(https://github.com/Toblerity/Fiona/pull/564)。在此期间,您可以使用
schema = gpd.io.file.infer_schema(gdf)
schema['properties']['int_column'] = 'int:18'
gdf.to_file('gdf.shp', schema=schema)