pandas 删除字符串末尾的数字,具体取决于出现在末尾的数字

fumotvh3  于 2023-04-28  发布在  其他
关注(0)|答案(1)|浏览(178)

我有一个 Dataframe ,我想遍历行,并删除末尾的数字,这取决于出现在末尾的数字。如果数字在[0到5]之间,我想删除1个数字,如果数字等于20,我想删除每个单词末尾的2个数字。
我设计了通用代码,但是我不知道如何定义一行中的一个单词是以0到5结尾还是以20结尾,你能帮我解决这个问题吗?

def vvv (df):
    for index, row in df.iterrows:

        

>     if   row['FT'] ends to a number from 1 to 5

        row['FT'] = row['FT'].str.replace(r'\d$', '', regex=True)

>     if   row['FT'] ends to  20

        row['FT'] = row['FT'].str.replace(r'\d\d$', '', regex=True)
    
    return df

更新:我设计的代码如下,但我得到了另一个TypeError错误:“method”对象不可迭代

def vvv(df):
    for index, row in df.iterrows:
        row['FT'] = row['FT'].str.replace(r'\([1-9]|10)$', '', regex=True)
        row['FT'] = row['FT'].str.replace(r'_$', '', regex=True)
    return df
n53p2ov0

n53p2ov01#

你可以用

df['FT'] = df['FT'].str.replace(r'(?<!\d)(?:[0-5]|20)$', '', regex=True)

Regex详情

  • (?<!\d)-左手数字边界(不允许有紧邻左边的数字)
  • (?:[0-5]|20) - 01234520
  • $-字符串结束。

参见regex demo
如果你还打算去掉数字前的空格,你可以添加.str.strip().str.rstrip()。或者,使用\s*(?<!\d)(?:[0-5]|20)$正则表达式(参见regex demo),但我会使用strip

相关问题