这篇文章主要介绍了利用python的pandas库读取csv文件保存至mysql数据库的方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
第一:pandas.read_csv读取本地csv文件为数据框形式
?
1 |
data = pd.read_csv( 'G:\data_operation\python_book\chapter5\\sales.csv' ) |
第二:如果存在日期格式数据,利用pandas.to_datatime()改变类型
?
1 |
data.iloc[:, 1 ] = pd.to_datetime(data.iloc[:, 1 ]) |
注意:=号,这样在原始的数据框中,改变了列的类型
第三:查看列类型
print(data.dtypes)
第四:方法一:保存至MYSQL【缺点耗时长】
利用MYSQLdb库,封装成一个类,实现创建表,添加数据的操作,缺点耗时长
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
class Jess_mysql(): """ 设置mysql类,实现创建数据框,表,及添加数据 """ def __init__( self ): self .mysql = MySQLdb.connect(user = mysql_name,host = mysql_host,password = mysql_password,database = mysql_database) self .conn = self .mysql.cursor() def create_table( self ,table_names,col_names): """ 创建表 :param table_names: 表名 :param col_names: 列名,列表格式 :return: """ tables = ' varchar(20),' .join([ '%s' ] * len (col_names)) sql_yuju = 'create table if not exists `{t}` ({v} varchar(20))' . format (t = table_names,v = tables) #字段需要标注格式 ss = sql_yuju % ( tuple (col_names)) print (ss) self .conn.execute(ss) self .mysql.commit() def add_data( self ,table_name,col_names,col_data): """ :param table_name: 表名 :param col_names: 列名,字段名 :param col_data: 字段值 :return: """ colname = ',' .join([ '%s' ] * len (col_names)) data = ',' .join([ '%s' ] * len (col_data)) sql_yuju = 'INSERT INTO `{t}` ({name}) VALUES ({data});' . format (t = table_name,name = colname,data = data) ss = sql_yuju % ( * col_names, * col_data) #print(ss) self .conn.execute(ss) self .mysql.commit() |
第五:利用sqlalchemy的create_engine()方法
1、创建连接
?
1 2 3 4 |
import sqlalchemy #engine=sqlalchemy.create_engine('mysql + mysqldb://root:[email protected]:3306/python_yuny') engine = sqlalchemy.create_engine( 'mysql+mysqldb://{user}:{password}@{host}:3306/{database}' . format (user = mysql_name,password = mysql_password,host = mysql_host,database = mysql_database)) |
2、利用pd.io.sql.to_sql()
?
1 |
pd.io.sql.to_sql(frame = data,name = 'yunying' ,con = engine,index = False ,if_exists = 'append' ) |
注意相关参数的设置。
此外,保存到mysql中,需要注意日期格式的列,因为在mysql对应的field设置格式为varchar(20)后,原始的日期2015-8-9,写入数据库,只有2015,这需要两步操作。
a、上面第二目录的,利用pandas.to_datetime(,format='%Y-%m-%d') #format的格式要和原始字符2016-8-9格式一样
b、利用datetime库,实现format='%Y%m%d'
?
1 2 3 4 |
x = data.shape[ 0 ] for i in range (x): col_data = list (df.iloc[i,:]) col_data[ 1 ] = datetime.date.strftime(col_data[ 1 ], '%Y%d%m' ) |
•这一步后,日期格式由原始的2016-6-2,转为20160606,就可以以写入数据库对应的字段【其字段类型varchar(20)】
第六:读取mysql的数据
?
1 |
df = pd.read_sql( 'select * from %s' % table_name,con = engine,index_col = None ) |
默认不设置索引列,可以自行指定索引列名。
总结
以上所述是给大家介绍的使用python的pandas库读取csv文件保存至mysql数据库,希望对大家有所帮助,如果大家有任何疑问请给我留言,我会及时回复大家的。在此也非常感谢大家对我的支持!