python - 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()
您需要的标准
编辑:查看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”。有了这个。
推荐阅读
- mysql - Laravel 的嵌套查询
- java - Java 到 Kotlin 转换后出现问题,Android Studio 中出现错误,无法推断此参数的类型
- javascript - 我正在使用表单将输入存储在变量中,然后在屏幕上显示该变量。不允许内部脚本
- javascript - 滚动到消息末尾
- c# - 如何在 SQL Server 中使用 SqlTransaction 在 FOR 循环中运行一次命令
- android - Android Studio 渲染问题:在当前主题中找不到样式“coordinatorLayoutStyle”
- javascript - 删除列中的重复值
- arrays - 在Scala中将字符串拆分为二维数组
- reactjs - Redux-Form 7 验证 - 功能组件
- c - 套接字:显示客户端的 ip 和主机名