用括号替换字符串保留斜线 \
replace string with parentheses keeps the slash \
我在 geodataframe 中有 table,我已将其更改为 geopandas,它包含两个字段:ID 和 geometry。
几何列采用 WKT 格式,table 如下所示:
>>>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...
...
如果我不放 \,它不会替换任何东西,我会收到以下错误消息:
error: missing ), unterminated subpattern at position 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
我知道你问的是用正则表达式来替换你的几何图形的 WKT 表示,但如果你想将这些多边形实际转换为多多边形(这对我来说似乎不太常见),你可以创建形状 MultiPolygon
s 来自你的多边形,例如通过使用地理数据框的 apply
方法:
from shapely.geometry import MultiPolygon
covex.geometry = covex.geometry.apply(lambda g: MultiPolygon([g]))
之后,当显示 geometry
列时,您现在将获得多面体的实际 WKT 表示。
我在 geodataframe 中有 table,我已将其更改为 geopandas,它包含两个字段:ID 和 geometry。
几何列采用 WKT 格式,table 如下所示:
>>>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...
...
如果我不放 \,它不会替换任何东西,我会收到以下错误消息:
error: missing ), unterminated subpattern at position 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
我知道你问的是用正则表达式来替换你的几何图形的 WKT 表示,但如果你想将这些多边形实际转换为多多边形(这对我来说似乎不太常见),你可以创建形状 MultiPolygon
s 来自你的多边形,例如通过使用地理数据框的 apply
方法:
from shapely.geometry import MultiPolygon
covex.geometry = covex.geometry.apply(lambda g: MultiPolygon([g]))
之后,当显示 geometry
列时,您现在将获得多面体的实际 WKT 表示。