如何替换列中的复杂字符串 (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)的主要内容,如果未能解决你的问题,请参考以下文章

如何替换 hive 列中的特殊字符?

如何删除列中的多个字符串并将其替换为日期

如何替换火花数据框所有列中的多个字符?

python pandas用数字替换数据框中的字符串

我可以使用 MySQL 工作台替换 Mysql 中名为“key”的列中的字符串吗?

SQL如何将一列表中的字符替换成另外一个字符