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

2024-09-27 18:23:39 发布

您现在位置:Python中文网/ 问答频道 /正文

Python 2.7 我试图写一个“robot check”的结果(尽管我认为这在其他情况下也适用),其中我迭代了一个数据帧。 我试过了

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?谢谢你的帮助。在


Tags: 数据noorgimporttxtcomhttpparser
1条回答
网友
1楼 · 发布于 2024-09-27 18:23:39

这里有一个^{}

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

相关问题 更多 >

    热门问题