背景:
下文利用上海市2016年9月1日公共交通卡刷卡数据
如图:
想做一下上海市通勤数据挖掘,由于源文件有800多兆,用python读取起来很慢很卡,于是想导入数据库MySQL里面处理,以前一般是打开workbench
可视化操作导入数据库,这次想换成代码实现,于是琢磨着如何把这个csv文件用python导进去。
一般的,python把数据框写入数据库有两种方法
利用insert into 命令一条一条插入:
采用这种方法,可以爬一条立马向数据库里面插入一条数据,整体衔接好,不怕大量数据一次性塞进数据库导致拥堵;
pd.io.sql.to_sql( )整个数据框以追加的方式整体复制进去
今天主要研究第二种方法
实现代码:
1
2
3
4
5
6
7
8
9
10
11
12
|
import pandas as pd #导入数据分析模块 import pymysql #导入数据库接口模块 from sqlalchemy import create_engine data = pd.read_csv(r "D:\数据\yikatongchengkeshuakashuju\201608\SPTCC20160901.csv" ,engine = 'python' ,header = None ) #读取数据encoding='mbcs', data.columns = [ "卡号" , "日期" , "时间" , "站点" , "交通方式" , "费用" , "是否有优惠" ] #由于原csv文件没有表头,这里添加表头 #print(data.head()) #测试 db = pymysql.connect( "localhost" , "root" , "123456" , "metro_sh" ,charset = "utf8" ) #链接数据库metro_sh cursor = db.cursor() #获取游标 cursor.execute( "drop table if exists metro_sh_20160901" ) #以重新写入的方式导入数据表 connect = create_engine( "mysql+pymysql://root:123456@localhost:3306/metro_sh?charset=utf8" ) pd.io.sql.to_sql(data, "metro_sh_20160901" ,connect,schema = "metro_sh" ,index = False ,if_exists = "append" ) |
结果截图:
代码解读:
create_engine( )参数说明:
create_engine(mysql+mysqldb://用户名:密码@localhost:端口/数据库名?编码)
设置数据库的编码方式的时候最好与之前pd.read_csv()中的encoding参数一致
pd.io.sql.to_sql( )参数说明:
(数据框, ‘表名’, con=连接键, schema=‘数据库名’, if_exists=‘操作方式’)
操作方式有append、fail、replace
-
append
:如果表存在,则将数据添加到这个表的后面 -
fail
:如果表存在就不写入 -
replace
:如果存在表,删了,覆盖
该方法有一个缺点:
该方法整体性好,内存消耗大,如果内存大可以一试
到此这篇关于如何让python把数据框写入MySQL的文章就介绍到这了,更多相关python把数据框写入MySQL内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://blog.csdn.net/zengbowengood/article/details/102487265