如何替换列中的复杂字符串 (Python)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何替换列中的复杂字符串 (Python)相关的知识,希望对你有一定的参考价值。
背景资料
我有一个数据集df,我想用 "Connected "替换字符串:"Connected to call(音频、视频或屏幕共享)",以及用 "Ended "替换 "Ended call"。
Connect End
Connected to call (audio, video or screen sharing) 3/3/2020 2:00:01 PM
Ended call 3/3/2020 2:05:00 PM
理想的产出。
Connect End
Connected 3/3/2020 2:00:01 PM
Ended 3/3/2020 2:05:00 PM
我已经试过了。
df1 = df["Connect"] = df["Connect"].replace(Connected to call (audio, video, or screen sharing), "Connected")
此外,如果字符串位于多列中,我如何替换它们?连接和结束?(如上图所示)
感谢任何建议。
答案
numpy.select
# sample date
s = """Connect|End
Connected to call (audio, video or screen sharing)|3/3/2020 2:00:01 PM
Ended call|3/3/2020 2:05:00 PM"""
df = pd.read_csv(StringIO(s), sep='|')
# numpy.select with your conditions, choices and default value if condition is not met
df['Connect'] = np.select([df['Connect'].str.contains('Connected'), df['Connect'].str.contains('Ended')],
['Connected', 'Ended'], df['Connect'])
Connect End
0 Connected 3/3/2020 2:00:01 PM
1 Ended 3/3/2020 2:05:00 PM
另一答案
你要逃走 parantheses
与 \
而更换。这才是产生问题的原因。
所以要这样做。
In [133]: df.Connect.str.replace("Connected to call \(audio, video or screen sharing\)", 'Connected')
Out[133]:
0 Connected
1 Ended call
Name: Connect, dtype: object
对于所有的替换一起,你可以这样做。
In [142]: replacements= 'Connect' : "Connected to call \(audio, video or screen sharing\)" : 'Connected', 'Ended call': 'Ended'
In [143]: df.replace(replacements, regex=True, inplace=True)
In [144]: df
Out[144]:
Connect
0 Connected
1 Ended
以上是关于如何替换列中的复杂字符串 (Python)的主要内容,如果未能解决你的问题,请参考以下文章