Python中strftime传Series报错:无法将MeetingDate转为df指定日期格式
解决strftime()参数为Series导致的TypeError问题
你碰到的这个错误很典型——strftime()方法只接受单个字符串格式,但你传入的df['dateformat']是整个pandas列(Series类型),自然会触发类型不匹配的报错。而且你的循环逻辑有问题:单独遍历urls的话,根本没法对应到每一行对应的日期格式,肯定会出问题。
修正思路
核心是要遍历DataFrame的每一行,这样才能同时获取当前url对应的日期格式、xpath等信息,确保传给strftime()的是单个字符串:
- 用
df.iterrows()代替单独遍历urls,这样能拿到每一行的所有字段 - 从当前行中提取单个日期格式字符串,再调用
strftime() - 用格式化后的日期替换当前行xpath里的占位符
*
修正后的完整代码
import datetime import pandas as pd from selenium import webdriver MeetingDate = datetime.datetime(2020,5,11) df = pd.read_csv('request.csv') # 遍历DataFrame的每一行,同时获取当前行的所有数据 for idx, row in df.iterrows(): url = row['url'] # 取出当前行的单个日期格式字符串(不再是整个Series) date_format = row['dateformat'] xpath_template = row['WebCfg_MtgDate_xpath'] fcid = row['fcid'] driver.get(url) # 现在传入的是单个字符串,符合strftime的要求 agendaMeetingdateformat = MeetingDate.strftime(date_format) # 替换当前行xpath模板里的* target_xpath = xpath_template.replace('*', agendaMeetingdateformat) try: # 定位元素并获取文本 my_element_text = driver.find_element_by_xpath(target_xpath).text if my_element_text == agendaMeetingdateformat: print(f'fcid {fcid}: 会议日期验证通过') else: print(f'fcid {fcid}: 会议日期无效 - 实际值: {my_element_text}') except Exception as e: # 处理元素定位失败的情况,避免程序崩溃 print(f'fcid {fcid}: 元素定位失败 - 错误信息: {str(e)}') driver.close()
关键修改点说明
- 遍历方式优化:
iterrows()能让你同时拿到行索引和整行数据,确保每个url都对应正确的日期格式和xpath - 类型问题解决:
row['dateformat']是单个字符串,完美匹配strftime()的参数要求 - 健壮性提升:添加
try-except块捕获元素定位异常,避免一个url出错导致整个程序终止 - 可读性优化:打印时带上
fcid和实际错误信息,方便你快速定位问题所在
内容的提问来源于stack exchange,提问作者Sameer mohd
相关产品推荐
相关产品推荐

