Python中sqldf执行UPDATE语句报错‘no such table df’求修复
解决pandasql执行UPDATE报错"no such table df"的问题
核心问题说明
- pandasql默认不会自动识别全局环境中的
df变量,需要显式将其传入SQL执行环境 - pandasql基于SQLite实现,但不支持直接用UPDATE语句原地修改原DataFrame,它的执行逻辑是返回查询结果生成新的DataFrame,而非修改原数据
修正方案
1. 显式传递DataFrame到sqldf执行环境
调用sqldf时,通过globals()或自定义字典将df传入,让SQL能识别这个表。
2. 用SELECT+CASE WHEN替代UPDATE逻辑
通过查询生成包含修改后数据的新DataFrame,再覆盖原数据或生成新变量。
完整修正代码示例
from pandasql import sqldf # 用SELECT+CASE WHEN实现原UPDATE的逻辑 query = """ SELECT *, CASE WHEN C < 50 THEN C*10 ELSE C END AS C FROM df """ # 显式传递全局变量执行查询 updated_df = sqldf(query, globals()) # 若需要覆盖原DataFrame df = updated_df
补充写法
如果不想暴露全局变量,可自定义字典传递指定数据:
# 仅传递需要的df变量 updated_df = sqldf(query, {'df': df})
内容的提问来源于stack exchange,提问作者Tong
相关产品推荐
相关产品推荐

