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*