簡體   English   中英

熊貓功能耗時太長

[英]Pandas function taking too long

我試圖提取頂級URL並忽略路徑。 我使用下面的代碼:

for row in Mexico['Page URL']:
    parsed_uri = urlparse( 'http://www.one.com.mx/furl/Conteúdo Raiz/Meu' )
    Mexico['SubDomain'] = '{uri.scheme}://{uri.netloc}/'.format(uri=parsed_uri)

此腳本已在過去一小時內運行。 當我運行它時,它發出以下警告:

/anaconda/lib/python3.6/site-packages/ipykernel_launcher.py:3: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
  This is separate from the ipykernel package so we can avoid doing imports until

我很感激,如果有人能以更快的方式提出建議,也許可以指出“警告”暗示的方法

如果Series很長,那么為Series的每一行調用一次Python函數可能會非常慢。 加快這一點的關鍵是用(理想情況下)一個向量化函數調用替換多個函數調用。

使用Pandas時,這意味着根據矢量化字符串函數重寫Python函數(例如urlparse )。

由於urlparse是一個相當復雜的函數,重寫urlparse會非常困難。 但是,在您的情況下,我們的優勢在於知道我們關心的所有網址都以https://http://開頭。 所以我們不需要urlparse的全面通用性。 我們也許可以使用更簡單的規則: netloc是跟隨https://http://任何字符,直到字符串的結尾或下一個/ ,以先到者為准 如果那是真的那么

Mexico['Page URL'].str.extract('(https?://[^/]+)', expand=False)

可以從整個Series Mexico['Page URL']提取所有netlocs而不需要循環,也不需要多個urlparse函數調用。 len(Mexico)很大時,這會快得多。


例如,

import pandas as pd

Mexico = pd.DataFrame({'Page URL':['http://www.one.com.mx/furl/Conteúdo Raiz/Meu',
                                   'https://www.one.com.mx/furl/Conteúdo Raiz/Meu']})

Mexico['SubDomain'] = Mexico['Page URL'].str.extract('(https?://[^/]+)', expand=False)
print(Mexico)

產量

                                        Page URL               SubDomain
0   http://www.one.com.mx/furl/Conteúdo Raiz/Meu   http://www.one.com.mx
1  https://www.one.com.mx/furl/Conteúdo Raiz/Meu  https://www.one.com.mx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM