Python 如何替换数据框列中的所有数字(附加字母/符号,即43$)?

Python 如何替换数据框列中的所有数字(附加字母/符号,即43$)?,python,regex,pandas,Python,Regex,Pandas,我有一个关于股票市场的在线评论数据框架。 下面是一个例子: df = pd.DataFrame({'id': [1, 2, 3], 'comment': ["I made $425", "I got mine at 42c. per share", "Stocks saw a 12%

我有一个关于股票市场的在线评论数据框架。 下面是一个例子:

df = pd.DataFrame({'id': [1, 2, 3], 
                   'comment': ["I made $425",
                               "I got mine at 42c. per share", 
                               "Stocks saw a 12% increase"]})
我想用
NUMBER
替换数据框中的所有数字(包括符号和字母),以实现:

"I made NUMBER",
"I got mine at NUMBER per share", 
"Stocks saw a NUMBER increase"
我在a中找到了一个近似的解决方案,但这个解决方案仍然留给我剩余的字母和符号

def repl(x):
    return re.sub(r'\d+', lambda m: "NUMBER", x)

repl("I made 428c with a 52% increase")

>> I made NUMBERc with a NUMBER% increase
感谢您的帮助。

这应该可以:

import re

def repl(x):
    return re.sub(r'\S*\d+\S*', lambda m: "NUMBER", x)

print(repl("I made 428c with a 52% increase"))
输出:

I made NUMBER with a NUMBER increase
试试这个

def repl(l):
s=“”
对于l.split()中的i:
如果有([str(ui)表示范围(11)]:
s+=“数字”+“”
其他:
s+=i+'
返回s.strip()

您可以使用
[^\d\s]*\d\s*
正则表达式来匹配0个或更多字符(数字和空白除外)的任何块,然后是一个数字,然后是任意数量的非空白字符,并使用向量化方法替换为
数字

参见熊猫测试:

将熊猫作为pd导入
df=pd.DataFrame({'id':[1,2,3],
'评论':[“我赚了425美元”,
“我是以每股42美分的价格买的”,
“股票上涨了12%”)
df['comment']=df['comment'].str.replace(r'[^\s\d]*\d\s*','NUMBER')
df
#=>id注释
#=>0 1我打了一个号码
#=>12我以每股的数量得到了我的
#=>23只股票数量增加
我也看到了。详情:

  • [^\d\s]*
    -除了数字和空白(
    [^\d\s]
    是一个否定字符类)之外,任何字符的出现次数均为零或更多(
    *
  • \d
    -任何数字字符
  • \S*
    -零个或多个非空白字符

我认为主要的问题是如何准确定义要替换的内容。它是一系列数字,每端都有一些任意的符号和字符吗?或者只有一些上面有“c”或“$”的数字?如果任何符号都是“数字”的一部分,那么这些符号的界限是什么?可能是空格和标点符号。e、 g.“[a-zA-Z$%]*\d+[a-zA-Z$%]*”感谢您的详细回复,这既有信息又有效!谢谢你的回复,这也很棒。我真的应该更熟悉regex…谢谢你的回复,谢谢。我希望避免for循环,因为它是一个相当大的数据集。