我收到这个错误,当我试图上传一个csv文件作为一个geodataframe。根据其他问题的解决办法在这个网站上,这个方法应该做的伎俩。
下面是我使用的代码:将文件作为gdf上传,然后生成一个子集 Dataframe ,其中只显示一些列。
cp_union = gpd.read_file(r'C:\Users\User\Desktop\CPAWS\terrestrial_outputs\cp_union.csv')
cp_union.crs = 'epsg:3005'
cp_trimmed = cp_union[['COSEWIC_status','reason_for_designation','cnm_eng','iucn_cat','mgmt_e','status_e','classification','sq_m']]
如标题所述,我收到的错误是这样的:ValueError: GeoDataFrame does not support multiple columns using the geometry column name 'geometry'.
将gdf另存为csv然后重新加载为gdf的过程中是否有某个部分会导致创建额外的几何列?
- 编辑**
在另一个脚本中,我加载了与pd Dataframe 相同的csv文件,下面是pd Dataframe 中的第一行数据。
Unnamed: 0 0
fid_critic 0
scntfc_nm Castilleja victoriae
cnm_eng Victoria's Owl-clover
cnm_fren Castilléjie de Victoria
cswc_pop NaN
ch_stat Final
cb_site_nm Cattle Point
ch_detail Detailed Polygon
ch_variant NaN
ch_method NaN
hectares 0.8559
utm_zone 10
utm_east 478383
utm_north 5365043
latitude 48.438164
longitude -123.29226
shape_1 0.0
objectid 10251681.0
area_sqm 8478.6733
feat_len 326.5008
fid_protec -1
name_e NaN
name_f NaN
aichi_t11 NaN
iucn_cat NaN
oecm NaN
o_area 0.0
loc_e NaN
loc_f NaN
type_e NaN
mgmt_e NaN
gov_type NaN
legisl_e NaN
status_e NaN
protdate 0
delisdate 0
owner_e NaN
owner_f NaN
subs_right NaN
comments NaN
url NaN
shape_leng 0.0
protected 0
shape_le_1 320.859687
shape_area 6499.790343
geometry POLYGON ((1200735.4438 384059.0133999996, 1200...
COSEWIC_status Endangered
reason_for_designation This small annual herb is confined to a very s...
sq_m 6499.790343
classification c
Name: 0, dtype: object
所以我唯一的理论是,当你把gdf保存为csv时,csv包含一个叫做geometry的列。然后当你把这个csv加载为gdf时,geopandas试图在这个已经存在于csv中的列上创建一个新的geometry列。我可能完全错了。即使是这样,我也不知道该如何解决这个问题。
谢谢你的帮助!
2条答案
按热度按时间rvpgvaaj1#
溶液
完整代码
dsf9zpds2#
GeoPandas会在您读取CSV时自动添加几何字段。
因为你已经有了一个名为"geometry"的字段,GeoPandas抛出了一个异常。GeoPandas不会将"geometry"字段中的WKT字符串读取为geometry。
一些解决方法:
GEOM_POSSIBLE_NAMES
,该选项允许您指定不同的字段名称以在其中查找几何图形。KEEP_GEOM_COLUMNS
选项也是必需的,否则GDAL/OGR将返回一个"geometry"列以及几何,并且您仍将获得原始的ValueError: GeoDataFrame does not support multiple columns using the geometry column name 'geometry'.
1.或者,如果您可以控制CSV的原始写入,GDAL/OGR CSV driver documentation会注意到,如果字段名为"WKT",它将被读取为几何体:
读取名为"WKT"的字段时,假定包含WKT几何图形,但也被视为常规字段。
因此,一种选择是使用"WKT"作为几何列名称写出CSV,然后可以直接读取它:
1.最后一个选项是将CSV作为Pandas DataFrame读入(根据@RobRaymond的回答),然后从WKT手动创建几何图形并转换为GeoDataFrame。