社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

如何删除df列python中最后一个句点之后的字符?

Alex • 3 年前 • 1633 次点击  

所以我有一个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

我找到了一些这样的例子 here 但它看起来像是字符串上的一个运算符,是在某个字符之前的任何内容,而不是在它们之间。字符串操作符可能需要一段时间才能运行,所以想知道是否有一个函数碰巧在整个df上使用pandas?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/128881
 
1633 次点击  
文章 [ 3 ]  |  最新文章 3 年前
tozCSS
Reply   •   1 楼
tozCSS    3 年前

熊猫不会让计算速度更快。这个正则表达式可能适合您:

s.str.extract(r'(\w+)(\.\w{2,3})+$')[0]

但更好的解决方案是: Extract domain from URL in python

Sash Sinha
Reply   •   2 楼
Sash Sinha    3 年前

你可以用 pd.DataFrame. apply 以及一个lambda函数,该函数在拆分后返回最长的元素(基于中的注释) richardec's answer ):

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
richardec
Reply   •   3 楼
richardec    3 年前

这应该是有效的:

df['col'] = df['col'].str.rsplit('.', n=1).str[0].str.split('.').str[-1]

输出:

>>> df
           col
0  common_name
1       amazon
2       amazon
3       amazon
4      walmart
5      walmart
6     michigan