用括号替换字符串可以使斜杠\

时间:2020-09-10 07:56:33

标签: python pandas replace geopandas wkt

我在geodataframe中有一张桌子,但我已更改为geopandas,它包含两个字段:ID和几何。

“几何”列为WKT格式,表格如下所示:

>>>ID       geometry
0  1       POLYGON((2.9544435 6.3245124, 2.4098938 6.42657389...
1  2       POLYGON((3.4324624 6.8735201, 2.4590825 6.23098357...
...

我正在尝试替换括号和POLYGON,因此将不再是POLYGON(())的格式,而是MultiPolygon(((())))。

我已将数据框从geopandas更改为pandas,然后尝试使用replace:

covex['geometry']=covex['geometry'].replace({'POLYGON':'MultiPolygon'},regex=True)
covex['geometry']=covex['geometry'].replace({'\(\(':'\(\(\('},regex=True)
covex['geometry']=covex['geometry'].replace({'\)\)':'\)\)\)'},regex=True)

但是由于某种原因,替换会保留****,例如:

>>>ID       geometry
0  1       MULTIPOLYGON \(\(\(2.9544435 6.3245124, 2.4098938 6.42657389...
1  2       MULTIPOLYGON \(\(\(3.4324624 6.8735201, 2.4590825 6.23098357...
...

如果我不输入\,它不会替换任何内容,并且会出现以下错误消息:

错误:缺少),位置1处的子模式未结束

我的最终目标是将多边形和(())替换为多多边形((()))

2 个答案:

答案 0 :(得分:1)

您可以使用具有捕获组的正则表达式模式尝试Series.str.replace,可以测试here的正则表达式模式:

covex['geometry'].str.replace(r'POLYGON\((.*)\)', r'MULTIPOLYGON((\g<1>))')

0    MULTIPOLYGON(((2.9544435 6.3245124, 2.4098938 ...
1    MULTIPOLYGON(((3.4324624 6.8735201, 2.4590825 ...
Name: geometry, dtype: object

答案 1 :(得分:1)

我知道您正在问正则表达式以替换几何的WKT表示形式,但是如果您想将这些多边形实际转换为多多边形(这对我来说似乎不太常见),则可以创建整齐的MultiPolygon s从多边形中获取,例如通过使用地理数据框的apply方法:

from shapely.geometry import MultiPolygon

covex.geometry = covex.geometry.apply(lambda g: MultiPolygon([g]))

此后,在显示geometry列时,您现在将获得多多边形的实际WKT表示形式。