繁体   English   中英

如何有条件地替换熊猫数据框列中的子字符串?

[英]How to replace a sub-string conditionally in a pandas dataframe column?

我有一系列字符串(时间戳),我想有条件地替换这些字符串中的子字符串: - 如果有 '+' 字符,我想用 '-' 替换它 - 或者相反,如果有是“-”字符,我想用“+”替换它

我显然不能在没有条件的情况下简单地使用 replace() ,或者最后,所有 + & - 都将转换为单个 + 字符。

mySeries = mySeries.str.replace('+','-', regex=False)
mySeries = mySeries.str.replace('-','+', regex=False)

请问,我应该如何操作这个符号反转?

我预先感谢您的帮助。 祝你有美好的一天,

最好的,

皮埃尔

你可以这样做:

Char 1    What-What
Char 2    What+What
Char 3            0
Char 4            0
Char 5            0
Char 6            0
Char 7            0
Char 8            0

mySeries.loc[mySeries.str.contains(r'[-+]') == True] = mySeries.str.translate(str.maketrans("+-", "-+")) 


Char 1    What+What
Char 2    What-What
Char 3            0
Char 4            0
Char 5            0
Char 6            0
Char 7            0
Char 8            0

如果它不是一个系列,你必须这样做:

        A  B  C  D  E  F  G          H
Char 1  1  0  0  0  0  0  0  What-What
Char 2  1  0  0  0  0  0  0  What+What
Char 3  0  1  0  0  0  0  0          0
Char 4  0  0  1  0  0  0  0          0
Char 5  0  0  0  1  0  0  0          0
Char 6  0  0  0  0  1  0  0          0
Char 7  0  0  0  0  1  0  0          0
Char 8  0  0  0  0  0  1  0          0

df.H.loc[a.str.contains(r'[-+]') == True] = df.H.str.translate(str.maketrans("+-", "-+"))   

        A  B  C  D  E  F  G          H
Char 1  1  0  0  0  0  0  0  What+What
Char 2  1  0  0  0  0  0  0  What-What
Char 3  0  1  0  0  0  0  0          0
Char 4  0  0  1  0  0  0  0          0
Char 5  0  0  0  1  0  0  0          0
Char 6  0  0  0  0  1  0  0          0
Char 7  0  0  0  0  1  0  0          0
Char 8  0  0  0  0  0  1  0          0

您可以将正则表达式与接收匹配对象的 lambda 函数一起使用:

0    qqq--++www++
1      1234+5678-
dtype: object

s.str.replace(pat=r"\+|-", repl= lambda mo: "+" if mo.group()=="-" else "-", regex=True)

0    qqq++--www--
1      1234-5678+
dtype: object

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM