GeoPandas .to_file给出错误的列?

时间:2018-08-04 18:53:20

标签: python python-3.x pandas numpy geopandas

我有一个带有一列浮点值的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)

这似乎完全是疯了!我错过了一些非常愚蠢的事情吗?

1 个答案:

答案 0 :(得分:1)

如注释中所述,此问题是由于int32的限制所致。无法推断出正确的dtype,从而导致信息丢失。这应该通过即将发布的fionageopandas用于读取/写入文件)来解决,这将改善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)