python - 需要使用 Pandas Dataframe 编辑 MySQL 表中的行子集

标签 python mysql pandas pandasql

我正在尝试更改数据库中的表。但是我发现使用 Pandas 提供的 to_sql 方法很困难。我的 price_data 数据框看起来像这样:

初始数据框(作为数据库中的行):

enter image description here

用于更改数据的代码:

with con:
    price_data.to_sql(con=con, name='clean_prices2', if_exists='append', index=False, flavor='mysql')

这里的最终目标是修改初始数据帧(将零值转换为 Nan 值,然后对它们进行插值),并将其保存回数据库中。结果应如下所示(除非具有相同的 id):

所需输出:

enter image description here

如果您专门查看 close_price 列,您可以看到 0 值被分配为 90.7350

我当前的解决方案是附加数据行,这会导致重复的输入,如下所示:

实际输出:

enter image description here

最后,我必须执行另一个查询来删除重复的行(基于price_date)

我知道我可以将 if_exists 参数更改为replace,但这会删除数据库表的其余部分。基本上我想在不同的 symbol_id's

上多次执行此查询

是否有办法修改子集(在本例中,仅 3 行)而不删除表中的其余数据?该解决方案可以修改现有行(保持相同的id)或删除旧行,并创建不带零的新行。我只是想在没有额外删除重复查询的情况下完成此任务。

最佳答案

考虑一个具有精确结构的临时表作为最终表,但定期替换,然后将用于更新现有的最终表。尝试使用sqlalchemy engine对于这两项操作。

具体来说,对于后一个 SQL,您将使用 UPDATE JOIN临时表和最终表之间的查询。下面假设您使用 pymysql 模块(根据需要调整):

import pymysql
from sqlalchemy import create_engine
...

engine = create_engine("mysql+pymysql://user:password@hostname:port/database")

# PANDAS UPLOAD
price_data.to_sql(name='clean_prices_temp', con=engine, if_exists='replace', index=False)

# SQL UPDATE (USING TRANSACTION)
with engine.begin() as conn:     
    conn.execute("UPDATE clean_prices_final f" +
                 " INNER JOIN clean_prices_temp t" +
                 " ON f.symbol_id = t.symbol_id" +
                 " AND f.price_date = t.price_date" +
                 " SET f.open_price = t.open_price," +
                 "     f.high_price = t.high_price," +
                 "     f.low_price = t.low_price," +
                 "     f.close_price = t.close_price," +
                 "     f.adj_close_price = t.adj_close_price;")

engine.dispose()

关于python - 需要使用 Pandas Dataframe 编辑 MySQL 表中的行子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39549887/

相关文章:

python - 如何从Docker中运行的应用程序连接弹性集群

python - 我需要在 mongodb 中关闭连接吗?

mysql - UUID 在此位置无效(Mysql 工作台)

Mysql查找含有通配符的记录

python - ValueError : only single character unicode strings can be converted to Py_UCS4, 长度为 0

python - 在 Pandas DataFrame 中查找最大值的所有索引

python - 避免 SQLAlchemy 中的套接字超时

python - protonvpn 运行时错误 : Couldn't find acceptable executables for {'xdg-open' }

mysql - 哦 MySQL,你如何按日期加入相关记录

python - 如何为 Pandas DataFrame _repr_html_ 方法设置默认样式?