我正在使用
将数据从单个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
感谢您的帮助。
答案 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)