所以我有一個 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
我在這里找到了一些例子,但它看起來像是一個字串上的運算子,它是某個字符之前的任何東西,而不是它們之間的任何東西。字串運算子可能需要一段時間才能運行,所以想知道是否有一個函式偶然在整個 df 上使用了 pandas?
uj5u.com熱心網友回復:
這應該有效:
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
uj5u.com熱心網友回復:
您可以與 lambda 函式一起使用,該函式在拆分后回傳最長的元素(基于richardec 的回答中的評論):pd.DataFrame.apply
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
uj5u.com熱心網友回復:
Pandas 在計算方面不會讓事情變得更快。這個正則運算式可能對你有用:
s.str.extract(r'(\w )(\.\w{2,3}) $')[0]
但更好的解決方案是:從 python 中的 URL 中提取域
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/390595.html
