更换双管||在熊猫或Python中

时间:2018-03-26 16:11:21

标签: python pandas

使用“||”处理一些经过深思熟虑的数据作为单个字符串中的分隔符。我有一个超过60张的excel文件和100k个人记录,其中包含这些'||'分离利益。例如:

email          interests  
info@test.com  Sports||IT||Business||Other

我已经尝试使用以下代码来替换管道,但它似乎不起作用..管道被认为是一个特殊字符?谷歌搜索没有为我提供Python特定的结果。

import pandas as pd
df = pd.read_excel("test.xlsx")
df["interests"] = df["interests"].replace('||', ' , ')

出于某种原因使用str.replace只是在每个单独的字符之间添加了一些逗号

我可以在excel中使用一些宏/函数来做这个,但我真的想学习Python / Pandas到一个很好的水平,因此我的问题给你的大师!

任何帮助将不胜感激!

干杯, DN。

1 个答案:

答案 0 :(得分:3)

Series.replace(..., regex=False, ...)默认使用regex=False,这意味着它会尝试替换整个单元格值。

演示:

In [25]: df = pd.DataFrame({'col':['ab ab', 'ab']})

In [26]: df
Out[26]:
     col
0  ab ab
1     ab

In [27]: df['col'].replace('ab', 'XXX')
Out[27]:
0    ab ab        # <--- NOTE!
1      XXX
Name: col, dtype: object

In [28]: df['col'].replace('ab', 'ZZZ', regex=True)
Out[28]:
0    ZZZ ZZZ
1        ZZZ
Name: col, dtype: object

所以不要忘记使用regex=True参数:

In [23]: df["interests"] = df["interests"].replace('\|\|', ' , ', regex=True)

In [24]: df
Out[24]:
           email                       interests
0  info@test.com  Sports , IT , Business , Other

或使用Series.str.replace()始终将其视为RegEx:

df["interests"] = df["interests"].str.replace('\|\|', ' , ')

PS旁边的| is a special RegEx symbol,意思是OR,所以我们需要用反斜杠字符来逃避它