如何在条件语句中使用 str.contains() 将函数应用于数据框列的某些元素?
How to use str.contains() in a conditional statement to apply a function to some elements of a dataframe column?
我在 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 to www.Facebook.com). Some of the URLs are already in a clean format (www.Microsoft.com),并将 urlparse().netloc
应用于这些清理URLs 导致单元格为空。因此,我试图将 urlparse().netloc
函数应用于 URL 列的元素,其中元素包含字符串 'http',否则它应该 return 原始 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
您正在使用 pandas.Series.apply
因此您的函数 (lambda) 接收元素 (str
) 本身,因此您可以简单地使用 in
如下
df['URL'] = df['URL'].apply(
lambda x: urlparse(x).netloc if "http" in x else x
)
我在 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 to www.Facebook.com). Some of the URLs are already in a clean format (www.Microsoft.com),并将 urlparse().netloc
应用于这些清理URLs 导致单元格为空。因此,我试图将 urlparse().netloc
函数应用于 URL 列的元素,其中元素包含字符串 'http',否则它应该 return 原始 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
您正在使用 pandas.Series.apply
因此您的函数 (lambda) 接收元素 (str
) 本身,因此您可以简单地使用 in
如下
df['URL'] = df['URL'].apply(
lambda x: urlparse(x).netloc if "http" in x else x
)