![](/img/trans.png)
[英]How to remove all characters before a certain character in pandas df column in python
[英]How to remove characters after last period in df column python?
所以我有一个 df,其中有一列满是域。 所以例如我有这样的记录
common_name
www.amazon.com
amazon.com
subexample.amazon.com
walmart.en
walmart.uk
michigan.edu
我想使用 python 在最后一个之前提取任何内容。 但在第一个时期之前,如果有的话。 所以结果看起来像这样。
common_name
amazon
amazon
amazon
walmart
walmart
michigan
我在这里找到了一些例子,但它看起来像是一个字符串上的运算符,它是某个字符之前的任何东西,而不是它们之间的任何东西。 字符串运算符可能需要一段时间才能运行,所以想知道是否有一个 function 偶然在整个 df 上使用 pandas?
这应该有效:
df['col'] = df['col'].str.rsplit('.', n=1).str[0].str.split('.').str[-1]
Output:
>>> df
col
0 common_name
1 amazon
2 amazon
3 amazon
4 walmart
5 walmart
6 michigan
您可以使用pd.DataFrame. apply
与 lambda function 一起pd.DataFrame. apply
,它在拆分后返回最长的元素(基于richardec的答案中的评论):
In [1]: import pandas as pd
In [2]: d = {
...: 'domains': [
...: 'common_name',
...: 'www.amazon.com',
...: 'amazon.com',
...: 'subexample.amazon.com',
...: 'walmart.en',
...: 'walmart.uk',
...: 'michigan.edu',
...: 'tkoutletstore.co.uk',
...: 'tillyandotto.com.au',
...: ]
...: }
...: df = pd.DataFrame(data=d)
...: df
Out[2]:
domains
0 common_name
1 www.amazon.com
2 amazon.com
3 subexample.amazon.com
4 walmart.en
5 walmart.uk
6 michigan.edu
7 tkoutletstore.co.uk
8 tillyandotto.com.au
In [3]: df['extracted'] = df['domains'].apply(lambda d: max(d.split('.'), key=len))
In [4]: df
Out[4]:
domains extracted
0 common_name common_name
1 www.amazon.com amazon
2 amazon.com amazon
3 subexample.amazon.com subexample
4 walmart.en walmart
5 walmart.uk walmart
6 michigan.edu michigan
7 tkoutletstore.co.uk tkoutletstore
8 tillyandotto.com.au tillyandotto
Pandas 不会让计算变得更快。 此正则表达式可能对您有用:
s.str.extract(r'(\w+)(\.\w{2,3})+$')[0]
但更好的解决方案是: 从 python 中的 URL 中提取域
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.