pandas处理谷歌搜索控制台数据时报NoneType无date属性错误求解
问题根因
报错核心原因是df变量实际为None,导致无法访问date属性触发AttributeError,具体诱因如下:
- 调用
get_search_console_data时传入的webproperty参数为None,函数仅打印提示信息、没有显式返回值,默认返回None赋值给了df - 少数场景下即使
webproperty有效,谷歌搜索控制台接口返回的r.rows为空时,生成的DataFrame也不存在date字段,同样会触发属性报错 - 额外注意:代码中
df.date的写法存在隐患,建议统一使用df["date"]访问字段,避免列名和pandas内置属性重名时出现异常 - 冗余代码提示:
df[df["date"] > "2021-10-3"]这行没有赋值操作,无实际业务作用
修复方案
1. 调整函数逻辑,补充异常返回处理
import pandas as pd def get_search_console_data(webproperty, days=-365): if webproperty is None: print("Web property doesn't exist, please select a valid one from this list") print(account.webproperties) # 异常场景返回空DataFrame而非None,避免后续操作报错 return pd.DataFrame() query = webproperty.query.range(start='today', days=days).dimension('date', 'query') r = query.get() df = pd.DataFrame(r.rows) return df df = get_search_console_data(webproperty)
2. 补充合法性校验后执行数据处理
# 先判断df非空且存在date字段再操作 if not df.empty and "date" in df.columns: df["date"] = pd.to_datetime(df["date"]) # 复用过滤条件减少重复计算 filter_after = df["date"] > "2021-10-03" filter_before = df["date"] < "2021-10-03" last_day_queries = df.loc[filter_after, "query"] rest_of_queries = df.loc[filter_before, "query"] else: print("未获取到有效搜索控制台数据,请检查webproperty配置和接口返回结果")
内容的提问来源于stack exchange,提问作者theoseo
相关产品推荐
相关产品推荐

