python - Pandas系列矢量化文本处理

标签 python regex pandas

我想使用矢量化操作改进我的 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/

相关文章:

java - 使用java replaceAll方法用一个正则表达式替换句子中的单词

regex - Google Analytics 在自定义报告中排除空的自定义变量

pandas - dask 如何定义并行操作并返回具有不同形状的数据帧的自定义(时间折叠)函数

python - 如何知道python中2个列表中相同索引的值是正数还是负数?

python - For循环覆盖外部变量而不是创建新变量

python正则表达式在连续分隔符之间查找内容

python - 使用 Pandas 和 Scatter_Matrix 将不会显示

python - 基于 2 列条件的 pandas 中的条件运行计数(根据时间戳计算队列中的人数)

python如何改变全局变量

python - C函数传递一个指针和一个长度,Python回调需要创建一个数组并为其赋值