Pandas循环中如何根据HTTP请求状态码为指定行Login列赋值?
解决方案
你可以通过遍历DataFrame的索引+对应站点值的方式,直接给对应行的Login列赋值,修改后的代码如下:
import pandas as pd from requests import get # 读取csv初始化DataFrame df = pd.read_csv('sites.csv', sep=',', usecols=['Site', 'Login']) # 拼接login后缀 df['Site'] = df['Site'].astype(str) + 'login' # 先初始化Login列为空字符串 df['Login'] = '' # 同时遍历索引和站点地址 for idx, site_url in df['Site'].items(): try: # 加10秒超时避免长时间等待 result = get(site_url, timeout=10) if result.status_code == 200: df.loc[idx, 'Login'] = 'yes' print(f"{site_url} login page") else: print(f"{site_url} not a login page") except Exception as e: # 捕获网络错误、超时等异常情况 print(f"{site_url} 请求失败:{str(e)}") # 可以输出查看最终结果,也可以保存回csv print(df) # df.to_csv('sites_with_login.csv', index=False)
核心修改说明
- 不再单独生成newdf,直接在原df上处理,减少冗余变量
- 遍历的时候使用
items()方法同时获取行索引idx和对应的站点地址,通过df.loc[idx, 'Login']直接给对应行的Login字段赋值 - 增加了异常捕获逻辑,避免网络不通、域名不存在等问题导致脚本直接崩溃
- 给get请求增加了超时参数,避免脚本长时间无响应
内容的提问来源于stack exchange,提问作者Douglas Soares
相关产品推荐
相关产品推荐

