熊猫与MySQL查询和变量参数循环

时间:2018-10-17 18:52:23

标签: python pandas

我正在使用

将数据从单个csv文件加载到数据帧中
df = pd.read_csv('data.csv', names=col_names, sep=',', skiprows=1)
col_names = ['created_date', 'latitude', 'longitude']

这会将我的数据很好地分为列框架,并跳过具有行标签的第一行

但是我想使用一个for循环对每个用户执行相同查询的过程自动化。我的功能是:

sql = "select distinct mobile_user_id from score where speed_range_id > 1"
distance_query = """SELECT created_date, latitude, longitude FROM score s where s.mobile_user_id = %(mobile_user_id)s and speed_range_id > 1 group by latitude, longitude order by id asc"""
cursor1.execute(sql)
result = cursor1.fetchall()

for rowdict in result:
    distance = cursor3.execute(distance_query, rowdict)
    distance_result = cursor3.fetchall()
    df = pd.read_sql_query(distance_query, rdsConn, params={rowdict})

如您所见,结果变量保存用户列表,我想遍历所有用户以为每个用户生成数据集。

我一直在尝试使用pd.read_sql_query,但无法将rowdict的移动用户参数传递给查询。

我将如何使用熊猫来传递该变量?如何以以前的方式组织数据?

data.csv示例:

created_date,          latitude,    longitude
"2018-05-24 17:46:25", 20.61844841, -100.40813424
"2018-05-24 21:03:02", 20.58469452, -100.39204018
"2018-05-25 10:29:57", 20.61180308, -100.40826959
"2018-05-25 21:02:43", 20.59868518, -100.37825344

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

考虑通过在聚合查询中添加WHERE子句来运行结合两个查询的纯SQL。

当前,您正在尝试使用WHERE子句,将每行一个值与许多值进行比较:where mobile_user_id = %(mobile_user_id)s,这将永远不相等。另外,您准备的语句没有与参数值相同数量的占位符。可能您是说where mobile_user_id IN (?, ?, ?, ?, ?, ...)涉及动态设置占位符?

尽管如此,只需运行聚合查询即可。然后,将结果集导入熊猫。具体来说,将 mobile_user_id 作为分组添加到查询中:

sql = """select mobile_user_id, created_date, latitude, longitude
         from score
         where speed_range_id > 1
         group by mobile_user_id, created_date, latitude, longitude 
         order by id asc
      """

df = pd.read_sql_query(sql, rdsConn)