如何从MySQL中操作Pandas DataFrame?项目技术问题求助
操作MySQL中已插入的Pandas DataFrame数据
一、读取MySQL数据到DataFrame后操作
先把MySQL里的表数据读进Pandas,再用常规DataFrame方法处理:
- 导入依赖包:
import pandas as pd from sqlalchemy import create_engine
- 建立MySQL连接(替换成你的数据库信息):
engine = create_engine('mysql+pymysql://用户名:密码@主机IP:端口/数据库名')
- 读取指定表到DataFrame:
df = pd.read_sql_table('你的目标表名', engine)
- 常规DataFrame操作示例:
- 筛选数据:
filtered_df = df[df['销量'] > 1000] - 新增计算列:
df['利润'] = df['售价'] - df['成本'] - 分组统计:
category_stats = df.groupby('商品分类')['销量'].sum().reset_index()
- 筛选数据:
- 把更新后的数据写回MySQL:
- 追加数据到原表:
df.to_sql('你的目标表名', engine, if_exists='append', index=False) - 覆盖原表(谨慎使用,会清空原有数据):
df.to_sql('你的目标表名', engine, if_exists='replace', index=False) - 更新特定行:用SQL语句精准定位,比如:
- 追加数据到原表:
engine.execute("UPDATE 你的目标表名 SET 状态 = '已发货' WHERE 订单ID = %s", ('OD20240501',))
二、直接用SQL操作MySQL数据(适合复杂逻辑)
如果有复杂的查询、批量更新需求,直接写SQL执行更高效:
- 执行查询并返回结果到DataFrame:
query = """ SELECT 订单ID, 用户ID, 总金额 FROM 你的目标表名 WHERE 下单时间 >= '2024-01-01' ORDER BY 总金额 DESC """ high_value_orders = pd.read_sql(query, engine)
- 执行批量更新/删除:
# 批量更新 update_query = "UPDATE 你的目标表名 SET 折扣 = 0.8 WHERE 总金额 >= 5000" engine.execute(update_query) # 删除无效数据 delete_query = "DELETE FROM 你的目标表名 WHERE 状态 = '已取消' AND 下单时间 < '2024-01-01'" engine.execute(delete_query)
三、实用注意事项
- 确保数据库账号有对应的读写权限,避免操作失败
- 处理大表时,用分块读写避免内存溢出:
# 分块读取表数据 chunk_iter = pd.read_sql_table('你的目标表名', engine, chunksize=10000) for chunk in chunk_iter: # 逐块处理数据 pass # 分块写入数据 df.to_sql('你的目标表名', engine, if_exists='append', index=False, chunksize=10000)
- 表有主键的话,更新时一定要用主键定位,防止误改大量数据
内容的提问来源于stack exchange,提问作者Sanjay Rajan R
相关产品推荐
相关产品推荐

