【问题标题】:Python - Splitting and replacing parts of a list with multiple replacements in a pandas dataframePython - 在熊猫数据框中使用多个替换来拆分和替换列表的一部分
【发布时间】:2021-05-24 04:45:15
【问题描述】:

在 Python 中,我有一个 pandas 数据框中的位置列表,我想减少每个字符串以匹配更大列表的格式,目的是合并列表。

最终,我想让这个列表与另一个数据框的格式匹配,这样当我合并时,我只会合并“stop_name”列匹配的行。

例如,在下面的列表中,我想删除“STATION”,这样“BOONTON STATION”就变成了“BOONTON”。

但是,我也希望“BUTLER STATON (NEW JERSEY)”变成“BUTLER”,删除“STATION (NEW JERSEY)”。

最后,对于一个 2 字的车站名称,我想保留第二个字,这样“MORRIS PLAINS STATION”就变成了“MORRIS PLAINS”。

基本上,我想从“站”一词之前的一个空格中删除所有内容,以及“stop_name”列中每一行中的所有内容。

我尝试了各种字符串的拆分和替换,但要么出错,要么没有对每一行进行替换。

我们将不胜感激任何可行的解决方案。

stop_name
0   BOONTON STATION
1   BUTLER STATION (NEW JERSEY)
2   CONVENT STATION (NJ TRANSIT)
3   DOVER STATION (NJ TRANSIT)
4   LAKE HOPATCONG STATION
5   MADISON STATION (NJ TRANSIT)
6   MILLINGTON STATION
7   MORRIS PLAINS STATION
8   MORRISTOWN STATION
9   MOUNT ARLINGTON STATION
10  MOUNT TABOR STATION
12  POMPTON PLAINS STATION
13  TOWACO STATION

【问题讨论】:

    标签: python pandas string replace split


    【解决方案1】:

    不带正则表达式的替代方案:

    >>> df["stop_name"].str.split("STATION").str[0].str.strip()
    0             BOONTON
    1              BUTLER
    2             CONVENT
    3               DOVER
    4      LAKE HOPATCONG
    5             MADISON
    6          MILLINGTON
    7       MORRIS PLAINS
    8          MORRISTOWN
    9     MOUNT ARLINGTON
    10        MOUNT TABOR
    12     POMPTON PLAINS
    13             TOWACO
    Name: stop_name, dtype: object
    

    【讨论】:

      【解决方案2】:

      正则表达式extract() 是直截了当的。

      df = pd.read_csv(io.StringIO("""stop_name
      0   BOONTON STATION
      1   BUTLER STATION (NEW JERSEY)
      2   CONVENT STATION (NJ TRANSIT)
      3   DOVER STATION (NJ TRANSIT)
      4   LAKE HOPATCONG STATION
      5   MADISON STATION (NJ TRANSIT)
      6   MILLINGTON STATION
      7   MORRIS PLAINS STATION
      8   MORRISTOWN STATION
      9   MOUNT ARLINGTON STATION
      10  MOUNT TABOR STATION
      12  POMPTON PLAINS STATION
      13  TOWACO STATION"""), sep="\s\s+", engine="python")
      
      df.stop_name = df.stop_name.str.extract(r"(^.*) STATION.*$")
      
      
      
      stop_name
      0 BOONTON
      1 BUTLER
      2 CONVENT
      3 DOVER
      4 LAKE HOPATCONG
      5 MADISON
      6 MILLINGTON
      7 MORRIS PLAINS
      8 MORRISTOWN
      9 MOUNT ARLINGTON
      10 MOUNT TABOR
      12 POMPTON PLAINS
      13 TOWACO

      【讨论】:

        【解决方案3】:

        看来你只是想用空字符串替换模式 STATION.*

        df.stop_name.str.replace(' STATION.*', '')
        
        0             BOONTON
        1              BUTLER
        2             CONVENT
        3               DOVER
        4      LAKE HOPATCONG
        5             MADISON
        6          MILLINGTON
        7       MORRIS PLAINS
        8          MORRISTOWN
        9     MOUNT ARLINGTON
        10        MOUNT TABOR
        12     POMPTON PLAINS
        13             TOWACO
        Name: stop_name, dtype: object
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-09-09
          • 2022-01-11
          • 2020-05-13
          • 2017-07-08
          • 1970-01-01
          • 1970-01-01
          • 2021-01-20
          • 2017-04-11
          相关资源
          最近更新 更多