我看到了许多类似的问题,但没有一个能解决这个问题。
df = pd.DataFrame()
df['dummy'] = ['gg-21.534wgtr..eu678+ithn']
我想要
-21.534..678+
我想真正删除那些字符,所以我的尝试,
df['dummy'].astype(str).str.replace(r'D+','')
21534678
不起作用。
regex将是我的第一选择,否则任何pandas替代方案,也就是任何python替代方案。
您应该使用
df['dummy'] = df['dummy'].astype(str).str.replace(r'[^d.+-]+', '')
请参阅regex演示。
pandas方法是Series.str.replace
,用于查找匹配项并将其替换为另一个字符串(空字符串,因为您正在删除匹配项(。
您需要的模式是[^d.+-]+
,这是一个取反的字符类,它匹配除数字.
、+
或-
之外的任何字符、1次或多次出现。请注意-
的位置,它必须位于要被视为文字-
符号的字符类的开始或结束处,否则它将创建一个范围。
我不确定是否能理解你的问题,但这给了我你要求的示例输出:
import re
reg_exp = re.compile("([0-9+-.,]+)")
string = 'gg-21.534wgtr..eu678+ithn'
res = reg_exp.findall(string)
print(''.join(res))
您可以通过python re 实现这一点
说明:
d+
(任意数字(
|
(或(
.+
(任意长度的任意.
(
|
(或(
+
(任意单个+
>>添加一个+
,使其成为任意长度的++
(
|
(或(
-
(任意单个-
>>为任意长度的--
添加一个+
(
import pandas as pd
import re
pattern = r'd+|.+|+|-'
df = pd.DataFrame()
df['dummy'] = [''.join(re.findall(pattern, 'gg-21.534wgtr..eu678+ithn'))]
print(df)
dummy
0 21.534..678+
我不是正则表达式大师,但我的第一个解决方案是
[^\d+-\.]