pandas 如何在Python中使用for循环运行SQL查询

iklwldmw  于 2023-06-20  发布在  Python
关注(0)|答案(2)|浏览(147)

我在表A中有100条记录,我在这里只列出4条,但请使用循环来解决这个问题

A = ['A001', 'B001','C001','Bdd','djd.djsx']
AB = pd.DataFrame(A, columns = ['app_name']) 
AB

app_name
0   A001
1   B001
2   C001
3   Bdd
4   djd.djsx

我有SQL查询看起来像这样

select COUNT (DISTINCT [R_ID]) 
from database_view
where [app_name] in ('A001')

我想使用循环执行查询100次,并将最终结果追加到AB中
我尝试的是:

For i in AB:
    sql = '''select COUNT (DISTINCT [R_ID]) 
from database_view
where  [app_name] in {i}'''

    a=pd.read_sql_query(sql,database)
    final = AB.append(a,ignore_index = True)
final

但是它不起作用,而且我发现它会在df“AB”的右边多加一列,但是它最后会把计数值附加到新的一行。

预期结果如下所示,expected result

这意味着应用程序A001有6个不同的R_ID,应用程序B 001有1个不同的R_ID
任何帮助是真正的appreicated!

xxhby3vn

xxhby3vn1#

考虑使用GROUP BY的单个聚合查询,没有任何for循环,并且需要附加到 Dataframe 。SQL查询运行后,使用DataFrame.query将结果过滤到100个应用程序的列表中。

sql = '''SELECT [app_name], COUNT(DISTINCT [R_ID]) AS r_id_count
         FROM database_view 
         GROUP BY [app_name]
      '''

apps = AB["app_name"].tolist()

app_counts_df = (
    pd.read_sql_query(sql, database)
      .query("app_name == @apps")
)
rqqzpn5f

rqqzpn5f2#

你忘了在SQL查询中的for循环和f-string中放入列名。试试这个代码:

for i in AB['app_name']:
    sql = f'''select COUNT (DISTINCT [R_ID]) 
from database_view
where  [app_name] in {i}'''

更新-1:编辑SQL查询:

# Create an empty dataframe:
df=pd.DataFrame()

for i in AB['app_name']:
    sql = f'''select app_name,COUNT (DISTINCT [R_ID]) 
from database_view
where  [app_name] in {i}
GROUP BY app_name'''
    a=pd.read_sql_query(sql,database)
    final = df.append(a,ignore_index = True)

print(final)

相关问题