1

Python 2.7 データフレームを反復処理している「ロボットチェック」の結果を書き込もうとしています(ただし、これは他の状況でも当てはまると思います)。私が試してみました

import robotparser
import urlparse
import pandas as pd
df = pd.DataFrame(dict(A=['http://www.python.org'
                          ,'http://www.junksiteIamtellingyou.com'
                         ]))

df
    A
0   http://www.python.org
1   http://www.junksiteIamtellingyou.com

agent_name = 'Test'
for i in df['A']:
    try:
        parser = robotparser.RobotFileParser()
        parser.set_url(urlparse.urljoin(i,"robots.txt"))
        parser.read()
    except Exception as e:
        df['Robot'] =  'No Robot.txt'
    else:
        df['Robot'] =  parser.can_fetch(agent_name, i)
df
    A                                       Robot
0   http://www.python.org                   No Robot.txt <<<-- NOT CORRECT
1   http://www.junksiteIamtellingyou.com    No Robot.txt

もちろん、何が起こっているかというと、反復の最後の値が値の列全体に書き込まれているということです。Robot の値は「True」にする必要があります (これは、データ フレームからジャンク URL を削除することで実証できます。

.loc のいくつかの異なる順列を試しましたが、それらを機能させることができません。既存の行の新しい列を更新するのではなく、常に行を追加しているようです。

それで、(関数の結果で)更新される列を指定する方法はありますか?おそらく .loc(location) を使用するか、ラムダを使用するなどの別の方法がありますか? よろしくお願いします。

4

1 に答える 1