如何自动遍历DataFrame中SQL查询并将结果存入新列?
如何批量执行DataFrame中的SQL语句并保存结果到新列?
我来帮你搞定这个问题!你现在的代码没实现遍历所有行,而且依赖全局变量的方式不太稳妥,这里给你两种简单可靠的解决方案:
方法一:用apply函数(简洁高效)
这是Pandas里处理逐行操作最常用的方式,一行代码就能搞定新列的生成:
import pandas as pd # 假设你已经建立好数据库连接conn def run_single_sql(sql_stmt): # 执行传入的SQL语句,返回结果集中的第一个值 result_df = pd.read_sql(sql_stmt, conn) # 处理SQL可能返回空结果的情况,避免报错 return result_df.iat[0, 0] if not result_df.empty else None # 直接对column2的每条SQL应用函数,结果存入新列column3 df_parameter['column3'] = df_parameter['column2'].apply(run_single_sql)
为啥这么写?
apply会自动遍历column2的每一行,把每条SQL传给run_single_sql函数- 函数里先执行SQL拿到结果DataFrame,再用
iat[0,0]取出聚合后的单个值(你的SQL都是sum查询,结果只有一行一列) - 加了空结果判断,防止某些SQL没查到数据导致程序崩溃
方法二:用循环遍历(直观易调试)
如果你更喜欢一步步看执行过程,用iterrows循环遍历每一行也很方便:
import pandas as pd # 假设conn已建立 # 先初始化一个空的column3列 df_parameter['column3'] = None # 遍历DataFrame的每一行,idx是行索引,row是当前行的数据 for idx, row in df_parameter.iterrows(): current_sql = row['column2'] # 执行SQL result_df = pd.read_sql(current_sql, conn) # 把结果赋值给当前行的column3 if not result_df.empty: df_parameter.at[idx, 'column3'] = result_df.iat[0, 0] else: df_parameter.at[idx, 'column3'] = None
注意事项
- 确保你的数据库连接
conn是正常打开的,并且有执行这些SQL的权限 - 检查
column2里的SQL语法是否正确,比如你示例里的单引号嵌套(data_mothrn ='2020-04')要确保不会导致SQL语法错误 - 如果SQL执行耗时较长,
apply和循环的速度差不多,要是数据量极大,可以考虑用并行处理,但一般小到中等数据量这两种方法足够用
内容的提问来源于stack exchange,提问作者meng leng heish
相关产品推荐
相关产品推荐

