【问题标题】:How to remove numbers from string terms in a pandas dataframe如何从熊猫数据框中的字符串项中删除数字
【发布时间】:2017-06-02 19:43:49
【问题描述】:

我有一个类似于下面的数据框:

Name    Volume  Value
May21   23      21321
James   12      12311
Adi22   11      4435
Hello   34      32454
Girl90  56      654654

我希望输出格式为:

Name    Volume  Value
May     23      21321
James   12      12311
Adi     11      4435
Hello   34      32454
Girl    56      654654

想要从名称列中删除所有数字。

我最接近的是在 cell 级别使用以下代码进行操作:

result = ''.join([i for i in df['Name'][1] if not i.isdigit()])

知道如何在 series/dataframe 级别以更好的方式做到这一点。

【问题讨论】:

    标签: python string pandas


    【解决方案1】:

    您可以结合正则表达式将str.replace 应用于Name 列:

    import pandas as pd
    
    # Example DataFrame
    df = pd.DataFrame.from_dict({'Name'  : ['May21', 'James', 'Adi22', 'Hello', 'Girl90'],
                                 'Volume': [23, 12, 11, 34, 56],
                                 'Value' : [21321, 12311, 4435, 32454, 654654]})
    
    df['Name'] = df['Name'].str.replace('\d+', '')
    
    print(df)
    

    输出:

        Name   Value  Volume
    0    May   21321      23
    1  James   12311      12
    2    Adi    4435      11
    3  Hello   32454      34
    4   Girl  654654      56
    

    在正则表达式中,\d 代表“任意数字”,+ 代表“一个或多个”。

    因此,str.replace('\d+', '') 的意思是:“将字符串中所有出现的数字替换为空”。

    【讨论】:

      【解决方案2】:

      你可以这样做:

      df.Name = df.Name.str.replace('\d+', '')
      

      要玩和探索,请在此处查看在线正则表达式演示:https://regex101.com/r/Y6gJny/2

      \d+ 模式匹配的任何内容,即 1 个或多个数字,都将替换为空字符串。

      【讨论】:

        【解决方案3】:

        虽然这个问题听起来更笼统,但示例输入仅包含 尾随 数字。在这种情况下,您不必使用正则表达式,因为.rstrip(也可用via the .str accessor of Series objects)可以做到这一点:

        import string
        df['Name'] = df['Name'].str.rstrip(string.digits)
        

        同样,您可以使用.lstrip 删除开头的任何数字,或使用.strip 删除每个字符串开头和结尾的任何数字。

        【讨论】:

          【解决方案4】:

          .str 不是必需的。您可以使用带有 regex=True 参数的 pandas dataframe.replaceseries.replace

          df.replace('\d+', '', regex=True)
          

          如果您想更改源数据框,请使用inplace=True

          df.replace('\d+', '', regex=True, inplace=True)
          

          【讨论】:

            猜你喜欢
            • 2019-01-28
            • 1970-01-01
            • 2019-03-06
            • 2016-01-29
            • 2018-03-23
            • 2021-08-12
            • 1970-01-01
            • 2017-07-27
            • 1970-01-01
            相关资源
            最近更新 更多