Python 使用str replace为熊猫系列添加空间

Python 使用str replace为熊猫系列添加空间,python,regex,pandas,Python,Regex,Pandas,我一定是误解了如何使用替换 输入 期望输出 box 0 11M000 1 11M000 (MU) 代码 我现在得到的是什么 0 11M000 1 11M000 (MU)) 只需更换第一个支架 df['box'].str.replace('(', ' (') 0 11M000 1 11M000 (MU) 在正则表达式中转义(),因为特殊字符和替换为\\1,regex=True是中的默认值,因此应忽略: data={

我一定是误解了如何使用替换

输入

期望输出

          box
0      11M000
1  11M000 (MU)
代码

我现在得到的是什么

0          11M000
1    11M000 (MU))

只需更换第一个支架

df['box'].str.replace('(', ' (')
0         11M000
1    11M000 (MU)
在正则表达式中转义
()
,因为特殊字符和替换为
\\1
regex=True
是中的默认值,因此应忽略:

data={'box':['11M000','11M000(MU)']}
df = pd.DataFrame(data)
df['box'] = df['box'].str.replace('(\(MU\))'," \\1")
print (df)
           box
0       11M000
1  11M000 (MU)
没有带
regex=False
参数的正则表达式解决方案,也没有转义
()


您正在使用regex,并且()是特殊字符。您必须对其进行转义,因为您希望在字符上进行匹配,而不是在正则表达式上下文中使用特殊用例

import pandas as pd
data={'box':['11M000','11M000(MU)']}
df = pd.DataFrame(data)
df['box'] = df['box'].str.replace(".\(MU", " (MU", regex=True)
print(df)

regex=True
表示第一个模式是regex。在正则表达式中,括号是语法的一部分

意思是
(MU)
,因为正则表达式正好匹配
.MU
正则表达式匹配的内容(括号用于分组,您不会重复分组或类似的内容,所以它们在这里不起任何作用)。因此,它从
11M000(MU)
(点匹配
)中拾取
(MU)
),而不选择关闭的


如果您想解决这个问题,只需将
regex=True
更改为
regex=False
-正则表达式速度慢,用于查找模式,您只需查找一个普通的子字符串。

df['box']=df['box'].str.replace('.(MU.),(MU)
df['box'].str.replace('(', ' (')
0         11M000
1    11M000 (MU)
data={'box':['11M000','11M000(MU)']}
df = pd.DataFrame(data)
df['box'] = df['box'].str.replace('(\(MU\))'," \\1")
print (df)
           box
0       11M000
1  11M000 (MU)
df['box'] = df['box'].str.replace('(MU)'," (MU)", regex=False)
print (df)
           box
0       11M000
1  11M000 (MU)
import pandas as pd
data={'box':['11M000','11M000(MU)']}
df = pd.DataFrame(data)
df['box'] = df['box'].str.replace(".\(MU", " (MU", regex=True)
print(df)