繁体   English   中英

如何删除 df 列 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM