Python pandas代码运行报AttributeError: 'NoneType' object has no attribute 'date'问询
报错原因分析及修复方案
报错根因
触发AttributeError: 'NoneType' object has no attribute 'date'的核心原因是代码中的df变量为空值(None),同时还存在多处隐藏问题会导致后续运行报错:
- 函数返回值异常:当入参
webproperty为None时,get_search_console_data仅打印提示信息,没有显式返回值,Python会默认返回None,后续直接调用df.date就会触发该报错 - 列名缺失:就算
webproperty正常传值,pd.DataFrame(r.rows)生成的DataFrame默认列名为0、1,不存在date字段,后续访问df.date同样会报错 - 缩进错误:
df["date"] = pd.to_datetime(df.date)等行的缩进层级错误,会触发语法报错或在非预期分支下执行
完整修复代码
import pandas as pd def get_search_console_data(webproperty, days=-365): if webproperty is not None: query = webproperty.query.range(start='today', days=days).dimension('date', 'query') r = query.get() # 生成DataFrame时指定对应维度的列名 df = pd.DataFrame(r.rows, columns=['date', 'query']) return df # 异常分支返回空DataFrame,避免返回None print("Web property doesn't exist, please select a valid one from this list") print(account.webproperties) return pd.DataFrame() df = get_search_console_data(webproperty) # 仅当df非空时执行数据处理逻辑 if not df.empty: df["date"] = pd.to_datetime(df["date"]) target_date = pd.to_datetime("2021-10-3") last_day_queries = df[df["date"] > target_date]["query"] rest_of_queries = df[df["date"] < target_date]["query"] else: # 空df兜底逻辑 last_day_queries = pd.Series(dtype='object') rest_of_queries = pd.Series(dtype='object')
修复说明
- 异常分支返回空DataFrame而非默认None,从根源避免空值属性访问报错
- 生成DataFrame时显式指定
columns参数,确保date、query字段存在 - 增加df非空判断,所有数据处理逻辑仅在df有有效数据时执行
- 统一将对比日期转为datetime格式,避免字符串日期比较的格式兼容性问题
- 修复缩进错误,保证代码执行逻辑符合预期
内容的提问来源于stack exchange,提问作者user16394386
相关产品推荐
相关产品推荐

