pandas 按正则表达式条件从列中过滤字符串并替换它

Posted

技术标签:

【中文标题】pandas 按正则表达式条件从列中过滤字符串并替换它【英文标题】:pandas filter string from column by regex condition and replace it 【发布时间】:2021-01-26 16:18:35 【问题描述】:

这里我有一个来自 pandas DataFrame 的字符串。

https://www.gofundme.com/3hgsuu0,https://twitter.com/dog_rates/status/840632337062862849/photo/1

我想要做的是遍历所有行找到推特网址并从列中删除 NOT 推特网址。 目标是在列中只包含 twitter 网址,而不是 2 个或更多网址。

我做的是

arch_drop_new1.expanded_urls.apply(lambda x: str(x).split(",")[0])

这给了我, 之前的所有字符串,这些字符串出现在包含超过 1 个 url 的行中。

screenshot

【问题讨论】:

我想你可以使用arch_drop_new1['twitter_urls'] = arch_drop_new1['expanded_urls'].str.extract(r'(https://twitter\.com/\S*?)(?:,http|$)', expand=False) 【参考方案1】:

您可以使用.str.extract() 的值

rx = r'(https?://twitter\.com/\S*?)(?:,\s*http|$)'
arch_drop_new1['twitter_urls'] = arch_drop_new1['expanded_urls'].str.extract(rx, expand=False)

请参阅regex demo。

注意extract() 将从每一行中提取模式的第一次出现(这里,只有 Group 1 值,因为模式中有一个捕获组)。

详情

(https?://twitter\.com/\S*?) - 第 1 组:https://twitter.com/http://twitter.com/,然后是 0 个或多个非空白字符,尽可能少 (?:,\s*http|$) - 匹配 ,、0 个或多个空格,然后是 http 或字符串结尾的非捕获组。

【讨论】:

以上是关于pandas 按正则表达式条件从列中过滤字符串并替换它的主要内容,如果未能解决你的问题,请参考以下文章

需要使用 pandas.str() 使用字符串列表从列中选择值 [重复]

根据相邻列值 Pandas 从列中按第一个或第二个空格提取字符串

使用正则表达式从 mysql 列中提取子字符串

Pandas Pivot Table:按条件过滤时出错

Pandas Dataframe - 根据正则表达式条件替换所有单元格值

根据 Pandas 中另一列中的索引从列中获取数据