【问题标题】:Strip the last character from a string if it is a letter in python dataframe如果它是python数据框中的字母,则从字符串中删除最后一个字符
【发布时间】:2021-11-20 09:02:55
【问题描述】:

可能是用正则表达式完成的,我不是很擅长。

我的数据框是这样的:

import pandas as pd
import regex as re

data = {'postcode': ['DG14','EC3M','BN45','M2','WC2A','W1C','PE35'], 'total':[44, 54,56, 78,87,35,36]}

df = pd.DataFrame(data)
df

    postcode    total
0   DG14        44
1   EC3M        54
2   BN45        56
3   M2          78
4   WC2A        87
5   W1C         35
6   PE35        36

我想在我的列中获取这些字符串,最后一个字母像这样被剥离:

    postcode    total
0   DG14        44
1   EC3         54
2   BN45        56
3   M2          78
4   WC2         87
5   W1C         35
6   PE35        36

可能使用re.sub('', '\D')?

谢谢。

【问题讨论】:

    标签: python regex pandas dataframe


    【解决方案1】:

    你可以在这里使用str.replace

    df["postcode"] = df["postcode"].str.replace(r'[A-Za-z]$', '')
    

    【讨论】:

    • 谢谢。我发现我可以对 df.postcode.str.replace(r'\D$', '', regex=True).str.strip() 做同样的事情! :
    • @Bluetail 但要小心... \D 匹配任何非数字字符。我相信,这也包括符号字符之类的东西。如果你知道你真的只想定位结尾字母,那么[A-Za-z]$ 是一个更安全的选择。
    • 是的,我希望有人能给我更好的建议。
    【解决方案2】:

    其中一种方法:

    import pandas as pd
    import re
    
    data = {'postcode': ['DG14','EC3M','BN45','M2','WC2A','W1C','PE35'], 'total':[44, 54,56, 78,87,35,36]}
    
    data['postcode'] = [re.sub(r'[a-zA-Z]$', '', item) for item in data['postcode']]
    df = pd.DataFrame(data)
    print(df)
    

    输出:

    postcode  total
    0     DG14     44
    1      EC3     54
    2     BN45     56
    3       M2     78
    4      WC2     87
    5       W1     35
    6     PE35     36
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多