我正在尝试执行以下操作:
- 浏览包含列“Col1”和“Col2”的 DataFrame
- 获取“Col1”中的每一行,使用该值搜索 MySQL 数据库
- 将“Col2”中同一行的值替换为结果
我倾向于 For 循环方法,但是是否有更快的矢量化方法。到目前为止我正在使用的粗略代码:
rsp_df = pd.DataFrame(pd.read_csv(raw_data_path))
cur = mydb.cursor()
for x in rsp_df['Col1']:
query = ("SELECT stuff FROM some-table WHERE Asin = '%s'" % str(x))
cur.execute(query)
rows = cur.fetchone()
print rows
非常感谢!
最佳答案
考虑通过将查询导入到单独的数据帧中来将 MySQL 查询与 Pandas 数据帧合并。这样,您可以一次匹配所有情况,而无需循环,并且可以在一次调用中完成对列的任何条件更改。
下面是一个左
连接合并,用于保持rsp_df中的所有记录匹配或不匹配。 mydf 中缺少内容表示不匹配的记录。然后您可以将 Col2 替换为所需的结果(我不确定您所说的结果,可能是查询中的一列东西):
from sqlalchemy import create_engine
engine = create_engine('mysql://user:pwd@localhost/database')
mydf = pd.read_sql("SELECT stuff FROM some-table", con=engine)
merged_df = pd.merge(rsp_df, mydf, left_on=['Col1'], right_on=['Asin'], how='left')
mergedf.loc[pd.notnull(mergedf['Asin']), 'Col2'] = mergedf['result']
关于python - MySQL的向量化查找,并添加到DataFrame中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40076884/