Python:如何使用regex替换字符串中不需要的字符的第一个实例

2024-10-04 11:25:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有调查数据,答案显示在熊猫数据框中:

A            B           C           D           E
a. cattle    c. bird     b. cat      a. cattle   1.20-60
c. bird      b. cat      a. cattle   b. cat      3.61-103
b. cat       a. cattle   c. bird     c. bird     2.10-19

我试图删除答案引用字符/数字('a',b','c','1.,'2',3.')和出现在实际答案之前的空白,留下如下所示:

^{pr2}$

下面的代码使用的是一个字典,用于说明哪个答案引用需要替换为“”:

df[repval_cols].replace({
 'a. ':'',
 'b. ':'',
 'c. ':'',
 '1.':'',
 '2.':'',
 '3.':'',
  }, regex=True)

[repval_cols]是数据帧中的列的列表,我希望发生这种情况。在

但是,我遇到的问题是,我在上面使用的代码删除了列中字符串中每个字符的实例,因此它给我留下了如下无意义的数据:

A        B       C       D       E
cttle    ird     ct      cttle   0-60
ird      ct      cttle   ct      6-0
ct       cttle   ird     ird     0-9

有人能解释一下为什么要替换与我字典里不匹配的字符吗?我明确地说要将“a.”替换为“”而不仅仅是字符串中的任何“a”。在

如有任何建议,我们将不胜感激


Tags: 数据字符串答案代码字典数字字符cat
3条回答

这种转换不需要正则表达式。在

.拆分字符串,取第二个元素和strip

def parse(mystr): 
    return mystr.split('.')[1].strip()

df[repval_cols].applymap(parse)

以下是^{}的文档。它将所提供的函数应用于数据帧中的每个元素,并类似于apply方法。在

您可以根据第一个句点将字符串一分为二。然后从分割对中取出第二项,去掉空白。在

>>> (df.apply(lambda s: s.str.split('.', n=1))
       .apply(lambda s: [pair[1].strip() for pair in s])
     )
         A        B        C        D       E
0   cattle     bird      cat   cattle   20-60
1     bird      cat   cattle      cat  90-300
2      cat   cattle     bird     bird   10-19

对于regex语句,需要转义句点(点或.),这是正则表达式中用于匹配任何字符的元字符。要匹配文本点,需要对其进行转义(\.)。在

^{pr2}$

I am explicitly saying to replace 'a. ' with '' not just any 'a' within the string.

您的问题是.点,它是regex中用于任何字符的wildcard。 使用\.将对其进行转义并使其成为文本点可能会解决您的问题。在

因此,您的代码变成了。在

df[repval_cols].replace({
 'a\. ':'',
 'b\. ':'',
 'c\. ':'',
 '1\.':'',
 '2\.':'',
 '3\.':'',
  }, regex=True)

相关问题 更多 >