【问题标题】:replace string with parentheses keeps the slash \用括号替换字符串保留斜杠 \
【发布时间】:2020-09-10 07:56:33
【问题描述】:

我在 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,然后尝试使用替换:

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 ),位置 1 处未终止的子模式

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

【问题讨论】:

    标签: python pandas replace geopandas wkt


    【解决方案1】:

    我知道您在询问正则表达式来替换几何图形的 WKT 表示,但是如果您想将这些多边形实际转换为多面体(这对我来说似乎不那么不寻常),您可以从您的多边形,例如使用地理数据框的 apply 方法:

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

    之后,当显示 geometry 列时,您现在将获得多面体的实际 WKT 表示。

    【讨论】:

      【解决方案2】:

      您可以尝试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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-01
        • 2018-02-27
        • 2012-10-26
        • 1970-01-01
        • 2014-02-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-21
        相关资源
        最近更新 更多