示唆一度Pythonの関数を呼び出すと、迅速な方法について助言することができれば
/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
が、私はそれを感謝:私はそれを実行したときには、次の警告を与えましたシリーズが非常に長い場合、シリーズの各行は非常に遅くなる可能性があります。これを高速化するための鍵は、複数の関数呼び出しを(理想的には)1つのベクトル関数呼び出しに置き換えることです。
パンダを使用する場合は、vectorized string functionsという意味でのPython関数(例:urlparse
)の書き換えを意味します。
urlparse
はfairly complicatedなので、urlparse
の書き換えはかなり難しいでしょう。しかし、あなたのケースでは、我々が気にするすべてのURLがhttps://
またはhttp://
で始まることを知っているという利点があります。だから我々は本格的に普及しているurlparse
を必要としない。 netlocは、文字列の末尾までhttps://
またはhttp://
のいずれかの文字の後にあるか、または/
のいずれか早いほうになるまでのいずれかになります。 それが本当であれば、
Mexico['Page URL'].str.extract('(https?://[^/]+)', expand=False)
がループせずに、複数のurlparse
関数呼び出しをせずに全体のシリーズMexico['Page URL']
からすべてのnetlocsを抽出することができます。 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
ループ外 'urlparse'コールを移動します。それは毎回同じことをします。ループで 'row'を使用してもいけません。だから、ループはなぜですか?あなたのコードを間違って入力しましたか? –
ありがとうございました。 URLはデータフレームごとに異なります。私がこれをループから外してしまえば、どうすればこれに合うだろうか? –
これはおそらく私のisseの一部です。私はデータフレームをループし、ドメイン/サブドメインをコピーしてパスを無視しようとしています –