我需要的
当满足条件时,我需要替换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生产集群上运行,而这些构造是不可用/不可行的。
3条答案
按热度按时间ee7vknir1#
选项1,使用lookbehind和
str.replace
:选项2,可能更有效,使用布尔索引进行就地修改:
输出:
4dbbbstv2#
尝试使用startswith
输出:
zrfyljdw3#
你也可以查一下