如何将pandas DataFrame的子集/筛选结果导出到CSV文件和MySQL数据库
问题排查与解决方法
第一步:先校验子集是否生成正确
首先在筛选子集后、导出前,先加一行校验代码确认子集符合预期:
hold_subset = df[['firstname', 'lastname', 'fruit']] # 加下面两行校验 print(hold_subset.columns.tolist()) print(hold_subset.shape)
如果输出的列名不是你要的3个,说明筛选逻辑本身有问题:
- 检查列名是否存在拼写错误、大小写差异、首尾空格(比如原df列名是
firstname带前导空格) - 确认筛选代码执行前,原df已经完成了所有数据处理步骤,没有被后续逻辑意外修改
第二步:显式生成独立拷贝避免视图影响
pandas通过[]取列子集默认返回的是原df的视图,如果你后续修改了原df,视图内容也会同步变更。可以显式调用copy()生成独立的子集对象:
hold_subset = df[['firstname', 'lastname', 'fruit']].copy()
第三步:排查导出文件的重名问题
很多时候导出的还是全量数据是因为新旧文件重名,你打开的是之前生成的全量旧文件。可以先固定导出文件名测试:
# 临时用固定文件名测试,避免dt_string生成的文件名和旧文件重复 hold_subset.to_csv('test_subset_output.csv', index=False)
打开这个新生成的文件确认内容正确后,再换回你需要的动态文件名逻辑即可。
导出到MySQL的方法
只要确认hold_subset是正确的子集,直接调用to_sql方法即可,示例:
from sqlalchemy import create_engine # 替换为你自己的数据库连接信息 engine = create_engine('mysql+pymysql://用户名:密码@主机地址:端口/库名?charset=utf8mb4') hold_subset.to_sql( name='你的目标表名', con=engine, if_exists='replace', # 可选值为replace/append/fail,根据你的需求调整 index=False )
内容的提问来源于stack exchange,提问作者user1176783
相关产品推荐
相关产品推荐

