For循环迭代结果未保存至DataFrame问题求助
问题根源与解决方法
问题本质
你用zip(df['email'], df['domain_validity'], df['email_validity'])遍历DataFrame时,拿到的email_validity是原DataFrame元素的副本,修改这个变量的值不会同步到原DataFrame中,所以打印有结果但df里没更新。
解决方法:用索引直接操作原DataFrame
改用iterrows()遍历行索引,通过df.loc[idx, 'email_validity']直接给原DataFrame的列赋值,确保修改生效:
# 初始化验证列 df['email_validity'] = None driver = webdriver.Chrome(ChromeDriverManager().install()) driver.get('https://google.de/search?q="Nicolas Cage"') pyautogui.press('tab', presses=4) pyautogui.press('enter') # 按索引遍历行,直接操作原DataFrame for idx, row in df.iterrows(): email = row['email'] domain_validity = row['domain_validity'] if domain_validity is True: try: driver.get(f'https://google.de/search?q="{email}" after:1990') time.sleep(3) # 等待页面加载 time.sleep(2) page_source = driver.page_source # 校验搜索结果是否有效 if ('die alle deine Suchbegriffe enthalten' not in page_source and 'übereinstimmenden Dokumente gefunden' not in page_source and 'Es wurden keine Ergebnisse gefunden' not in page_source): df.loc[idx, 'email_validity'] = True print(True) elif 'not a robot' in page_source: print('help me!') input("write anything, and press enter:") # 人机验证后重新检查当前页面 page_source = driver.page_source if ('die alle deine Suchbegriffe enthalten' not in page_source and 'übereinstimmenden Dokumente gefunden' not in page_source and 'Es wurden keine Ergebnisse gefunden' not in page_source): df.loc[idx, 'email_validity'] = True else: df.loc[idx, 'email_validity'] = False else: df.loc[idx, 'email_validity'] = False print(False) except Exception as e: print(f"处理邮箱 {email} 出错: {str(e)}") df.loc[idx, 'email_validity'] = False # 出错时标记为无效 else: df.loc[idx, 'email_validity'] = domain_validity driver.close() print('completed') df.head()
额外注意事项
- 必须用
df.loc[idx, 'email_validity']赋值,直接修改row['email_validity']也不会生效,因为row是行的副本 - 异常处理中添加具体错误信息,方便排查问题
- 人机验证后重新检查页面,避免遗漏当前邮箱的有效性判断
- 若处理超大量邮箱,可考虑用
df.itertuples()替代iterrows()提升遍历效率,用法类似:
for row in df.itertuples(): idx = row.Index email = row.email domain_validity = row.domain_validity # 后续逻辑和上面一致,用df.loc[idx, 'email_validity']赋值
内容的提问来源于stack exchange,提问作者Luke
相关产品推荐
相关产品推荐

