Python /用函数中的新列值更新熊猫行



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),或者可能有另一种方法,例如使用lambda?谢谢你的帮助。

有一个apply:

import robotparser
import urlparse
import pandas as pd
df = pd.DataFrame(dict(A=['http://www.python.org'
                          ,'http://www.junksiteIamtellingyou.com']))
def parse(i, agent_name):
    try:
        parser = robotparser.RobotFileParser()
        parser.set_url(urlparse.urljoin(i, "robots.txt"))
        parser.read()
    except Exception as e:
        return 'No Robot.txt'
    else:
        return parser.can_fetch(agent_name, i)
df['Robot'] = df['A'].apply(parse, args=('Test',))

相关内容

  • 没有找到相关文章

最新更新