python - 如何在条件语句中使用 str.contains() 将函数应用于数据框列的某些元素?
问题描述
我在 pandas 数据框中有一列,其中包含指向网站的各种 URL:
df:
ID URL
0 1 https://www.Facebook.com/fr
1 2 https://Twitter.com/de
2 3 https://www.Youtube.com
3 4 www.Microsoft.com
4 5 https://www.Stackovervlow.com
我正在使用urlparse().netloc
将 URL 清理为只有域名(例如,从https://www.Facebook.com/fr到www.Facebook.com)。一些 URL 已经采用干净的格式(上面的www.Microsoft.com),并且应用urlparse().netloc
到这些干净的 URL 会导致一个空单元格。因此,我试图将该urlparse().netloc
函数应用于包含字符串“http”的 URL 列的元素,否则它应该返回原始 URL。这是我尝试使用的代码:
df['URL'] = df['URL'].apply(
lambda x: urlparse(x).netloc if x.str.contains("http", na=False) else x
)
但是,我收到此错误消息:AttributeError: 'str' object has no attribute 'str'
。任何有关如何克服此问题以完成任务的帮助将不胜感激!
解决方案
x
已经是一个字符串而不是Series
. 所以使用x.find
:
df['URL'] = df['URL'].apply(
lambda x: urlparse(x).netloc if x.find("http") != -1 else x
)
print(df)
# Output:
ID URL
0 1 www.Facebook.com
1 2 Twitter.com
2 3 www.Youtube.com
3 4 www.Microsoft.com
4 5 www.Stackovervlow.com
但是你可以使用str.extract
获取netloc:
df['URL'] = df['URL'].str.extract(r'(?:^https?://)?([^/]+)', expand=False)
print(df)
# Output:
ID URL
0 1 www.Facebook.com
1 2 Twitter.com
2 3 www.Youtube.com
3 4 www.Microsoft.com
4 5 www.Stackovervlow.com
推荐阅读
- android - ImageView Android中文本属性的用例是什么(它不会以任何方式显示)?
- java - 如何务实地检查雅虎电子邮件是否存在?
- android-studio - 在 Android Studio 中查找 100 多个结果
- javascript - 'ReferenceError:文档未定义'错误
- express - 执行 res.send() 时如何设置内容类型?
- java - 在 android studio 中引用菜单 itemId
- javascript - 似乎无法保持我的 DropZone 状态更新/总是重新渲染 React?
- robotframework - 如何在另一个关键字中的else语句中使用两个关键字
- css - 如何从 HTML 文件链接 CSS 文件?
- ruby - Ruby 方法版本控制