【问题标题】:How to remove characters from the string?如何从字符串中删除字符?
【发布时间】:2019-12-04 02:21:10
【问题描述】:

如何去除由数字和字符组成的列中的字符?

这是数据集:

Name
0yrs 0mon
11yrs 11mon 
2yrs 2mon
3yrs 5mon

这是预期的输出:

Name
0.0
11.11
2.2
3.5

这是实际输出:

Name
0.0.
11.11.
2.2.
3.5.

我尝试使用命令

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

【问题讨论】:

  • 为什么第二行变成1.11而不是11.11?
  • 抱歉错字错误。我应该写 11.11

标签: python regex


【解决方案1】:

尝试将rstrip 链接到您已经尝试过的内容的末尾,这样应该会去掉尾随句点:

In [5] df.Name.str.replace('\D+', '.').str.rstrip('.')
Out[5]: 
0      0.0
1    11.11
2      2.2
3      3.5
Name: Name, dtype: object

【讨论】:

  • 好主意。就此而言,您也可以使用[:-1] 来切断最后一个字符。
  • @StardustGogeta - 虽然问题中没有明确提及,但我的理解是 df 是 Pandas DataFrame,所以 [:-1] 不起作用。
  • 我实际上对 Pandas 并不熟悉,所以我对此一无所知,但谢谢你让我知道。
【解决方案2】:

我看到了第二次通过的两种微不足道的方法。一种是简单地删除尾随期间。另一种是单独替换字母串:如果用空格分隔则为点;否则删除它。

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

D+','')

【讨论】:

    【解决方案3】:

    尝试使用

    regex = re.compile(r"(\d+)\w+ (\d+)\w+")
    df.Name = regex.sub(r"\1.\2", df.Name.str)
    

    This link 解释了从正则表达式中捕获组的替换。 \d+ 匹配数字,\w+ 紧接着匹配剩余的 Unicode 单词字符。

    【讨论】:

    • 是的,我做了一些类似的:>>> re.sub('[a-z]{3}\s','.', '11yrs 11mon', 1) '11.11mon' >>> re.sub('[a-z]{3}','', '11.11mon', 1) '11.11' >>>
    猜你喜欢
    • 1970-01-01
    • 2021-10-26
    • 2015-12-01
    • 2010-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多