我需要什么
当满足条件时,我需要替换 Pandas 系列中的整个列值。例如,考虑以下系列:
d = ["foo", "bar", "bbl dklha", "bbl hoi", "bbl lala ho", "bbl ljhkh"]
ser = pd.Series(data=d)
如下所示:
0 foo
1 bar
2 bbl dklha
3 bbl hoi
4 bbl lala ho
5 bbl ljhkh
dtype: object
我现在需要的是,每个以 bbl 开头的字符串都应该替换为“bbl leerling”,如下所示:
0 foo
1 bar
2 bbl leerling
3 bbl leerling
4 bbl leerling
5 bbl leerling
dtype: object
我为此使用正则表达式(我需要它是正则表达式,这个示例经过简化,但实际上正则表达式更复杂)。
我尝试过的
ser = ser.str.replace(pat=r'^bbl', repl="bbl leerling", regex=True)
ser = ser.replace(to_replace=r'^bbl', value="bbl leerling", regex=True)
但是两者都只是用所需的字符串替换出现的子字符串,如下所示:
0 foo
1 bar
2 bbl leerling dklha
3 bbl leerling hoi
4 bbl leerling lala ho
5 bbl leerling ljhkh
dtype: object
如何才能替换整个值?我一直在 Series.replace
或 Series.str.replace
中寻找某种参数来执行此操作,但似乎没有。我不想循环这个系列,使用列表理解或 .apply,因为此代码将在 Spark 生产集群上运行,而这些构造不可用/不可行。
最佳答案
选项 1,使用后视和 str.replace
:
out = ser.str.replace(r'(?<=^bbl ).*', 'leerling', regex=True)
# or without lookbehind
out = ser.str.replace(r'^bbl .*', 'bbl leerling', regex=True)
选项 2,可能更有效,使用 boolean indexing对于就地修改:
ser[ser.str.startswith('bbl ')] = 'bbl leerling'
输出:
0 foo
1 bar
2 bbl leerling
3 bbl leerling
4 bbl leerling
5 bbl leerling
dtype: object
关于python - 根据正则表达式条件替换 Pandas 系列中的整个列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76210610/