繁体   English   中英

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

[英]Python / Updating panda row with new column value from function

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',))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM