【问题标题】:How to extract and create new columns from specific match如何从特定匹配中提取和创建新列
【发布时间】:2021-05-29 18:48:44
【问题描述】:

我有一个列 bike_name,我想知道将其拆分为 yearCC 的最简单方法。

CC 应包含附加在单词 cc 之前的数字数据。在某些情况下,如果 cc 不可用,则应保持空白。

year 仅包含最后一个单词中的年份。

TVS Star City Plus Dual Tone 110cc 2018
Royal Enfield Classic 350cc 2017
Triumph Daytona 675R 2013
TVS Apache RTR 180cc 2017
Yamaha FZ S V 2.0 150cc-Ltd. Edition 2018
Yamaha FZs 150cc 2015

【问题讨论】:

    标签: python-3.x pandas dataframe nlp


    【解决方案1】:

    您可以单独提取它们:year 是最后 4 个字符,CC 是通过正则表达式:

    df["year"] = df.bike_name.str[-4:]
    
    df["CC"] = df.bike_name.str.extract(r"(\d+)cc").fillna("")
    

    其中regex 正在寻找后面跟着"cc" 的数字序列,如果不匹配,它将给出NaNs;所以我们用空字符串填充它们,

    得到

                                       bike_name  year   CC
    0    TVS Star City Plus Dual Tone 110cc 2018  2018  110
    1           Royal Enfield Classic 350cc 2017  2017  350
    2                  Triumph Daytona 675R 2013  2013
    3                  TVS Apache RTR 180cc 2017  2017  180
    4  Yamaha FZ S V 2.0 150cc-Ltd. Edition 2018  2018  150
    5                      Yamaha FZs 150cc 2015  2015  150
    

    如果不仅需要提取还需要移除:
    df.bike_name = (df.bike_name.str[:-4]
                      .str.replace(r"\d+cc", "", regex=True)
                      .str.rstrip())
    

    第一行删除 year,第二行删除 cc 部分,最后我们 right strip 删除所有行,如果最后不需要空格,

    得到

    >>> df
    
                         bike_name  year   CC
    0      TVS Star City Plus Dual  2018  110
    1            Royal Enfield Cla  2017  350
    2              Triumph Daytona  2013
    3                   TVS Apache  2017  180
    4  Yamaha FZ S V 2.0 -Ltd. Edi  2018  150
    5                       Yamaha  2015  150
    

    【讨论】:

    • 太棒了。如何同时从原始自行车名称中删除年份和 cc?
    • @sais,编辑了删除它们的答案,希望对您有所帮助。
    • 太棒了!谢谢
    猜你喜欢
    • 2018-03-16
    • 1970-01-01
    • 2019-10-03
    • 2019-09-21
    • 2020-02-24
    • 1970-01-01
    • 2021-07-12
    • 2021-07-29
    • 1970-01-01
    相关资源
    最近更新 更多