Python3.9+下AWS Lambda中pd.concat报'NoneType'无_value属性错误
解决pd.concat在Python3.9+中报'NoneType' object has no attribute '_value'的问题
问题核心原因
这个错误的本质是你用来合并的列表tasks_api_response_df_lst中存在None值,或是某个task_df并非有效的DataFrame对象。Python3.8环境搭配的旧版本pandas对列表中的None有兼容处理,但3.9+环境对应的高版本pandas在合并时会严格校验每个元素的有效性,遇到None就会触发该属性错误。
具体解决方案
1. 过滤列表中的无效元素
在执行pd.concat前,先过滤掉列表里的None和非DataFrame对象:
def get_tasks(api_client, projects): tasks_api_response_df_lst=[] for i in project_ids: task_df = call_api_to_get_dataframe(api_client, i) # 替换为你的实际API调用代码 tasks_api_response_df_lst.append(task_df) # 只保留有效的DataFrame valid_dfs = [df for df in tasks_api_response_df_lst if isinstance(df, pd.DataFrame)] # 处理无有效数据的情况 if not valid_dfs: return pd.DataFrame() tasks_api_response_df = pd.concat(valid_dfs) return tasks_api_response_df
2. 确保API返回有效DataFrame
检查你的API调用逻辑,当接口无数据返回时,不要让task_df变为None,而是返回空DataFrame:
# 示例:修改API调用逻辑 def call_api_to_get_dataframe(api_client, project_id): response = api_client.get_tasks(project_id) if not response.get('data'): return pd.DataFrame() # 空数据时返回空DataFrame而非None return pd.DataFrame(response['data'])
3. (可选)对齐pandas版本
如果Lambda中Python3.9+环境的pandas版本远高于Python3.8环境的版本,可以尝试锁定pandas版本到和3.8环境一致(比如pandas==1.3.5),但更推荐前两种从代码逻辑上修复的方式。
内容的提问来源于stack exchange,提问作者helloworld
相关产品推荐
相关产品推荐

