我想使用矢量化操作改进我的 Pandas 代码。假设我有一个简单的 DataFrame,其中有一个文本列,其中可能包含 url。
Column1
0 hello http://www.google.com
1 bye www.mail.com www.docs.google.com/index
...
此时我正在迭代行并应用以下替换:
s = re.sub('https*://[\w\.]+\.com[\w=*/\-]+|https*://[\w\.]+\.com|[\w\.]+\.com/[\w/\-]+',lambda x: re.findall('(?<=\://)[\w\.]+\.com|[\w\.]+\.com', x.group())[0], s)
预期输出应该是:
Column1
0 hello google.com
1 bye mail.com docs.google.com
...
是否可以一次对整个系列进行此操作?
最佳答案
根据您给出的示例,您可以使用str.replace()
:
df['column1'] = df['column1'].str.replace('http|https|://|www.','') \
#replace some patterm by nothing
.str.replace('.com/[\w/\-]+','.com')
# replace specific pattern by other specific pattern
如果它不符合您的所有条件,您可以添加更多 .str.replace()
以及您需要的内容
编辑:查看 documentation of Series.str.replace 后它相当于 re.sub()
所以你可以这样做:
df['column1'] = df['column1'].str.replace('https*://[\w\.]+\.com[\w=*/\-]+|https*://[\w\.]+\.com|[\w\.]+\.com/[\w/\-]+',
lambda x: re.findall('(?<=\://)[\w\.]+\.com|[\w\.]+\.com', x.group())[0])
里面的参数与问题的 re.sub()
中的参数相同。但你并没有真正得到预期的输出,你保留了“www”。有了这个。
关于python - Pandas系列矢量化文本处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50568513/