网站推广员如何做,做网站优化推广多少钱,手机应用商店app,做网站入什么会计科目总结一下dataframe读取数据库#xff0c;以及整理数据的过程。分为三个部分#xff1a;数据读取#xff0c;数据整理以及数据写入。
1、数据读取
从csv读取读取数据#xff0c;使用pandas读的read_csv函数#xff0c;传入两个参数#xff0c;分别是path文件路径#x…总结一下dataframe读取数据库以及整理数据的过程。分为三个部分数据读取数据整理以及数据写入。
1、数据读取
从csv读取读取数据使用pandas读的read_csv函数传入两个参数分别是path文件路径usecols读取的列表返回的是dataframe格式。
import pandas as pddef csv_read(path, usecols):return pd.read_csv(path, usecolsusecols, encodinggbk)
2、数据整理
我需要做清除空值替换固定值匹配关键词等操作。
1清除空值很简单按列替换空值效率挺快。
df.fillna(0, inplaceTrue)
2替换固定值很简单 按列替换空值效率挺快
df[s_serialno] df[s_serialno].str.replace(, )
3匹配关键词由于多个关键词对多个内容使用第一点的按列匹配就不行我使用遍历方法
itertuples其他的遍历方法可参见Python - pandas DataFrame数据的合并与拼接merge、join、concat_pd.merge合并后顺序-CSDN博客 一开始我是匹配到不到关键词就直接删除掉测试小量数据还行但面对几十万数据频繁地让Dataframe删除数据效率很低。于是作了如下改写先将需要删作的idx保存下来再一并删除。
dropindex []
keyword XXXXXfor obj in df.itertuples():idx getattr(obj, Index)if getattr(obj, cnt) not in keyword.to_string():dropindex.append(idx)df.drop(dropindex, inplaceTrue)
3、数据写入
使用dataframe.to_sql方法开始的写法为保证数据唯一性避免主键重复出错使用try except方法 一条一条录入若主键重复直接pass即可。小量数据测试还行面对几十万数据单条录入数据库与程序的I/O效率不高数据录入缓慢。
from sqlalchemy import create_enginedef mysql_engine():return create_engine(mysqlpymysql://root:10086192.168.1.1:3306/order)def write_sql(rows):# 使用逐条插入而不用批量插入用try-except判断避免重复插入的异常for i in range(len(df)):try:df.iloc[i : i 1].to_sql(nametable_name, conmysql_engine(), if_existsappend, indexFalse)except Exception as e:# print(e)pass
于是我改用另一种方法
使用原生sql语句批量导入数据使用ON DUPLICATE key UPDATE 避免主键重复出错。
import pymysqldef getConn():return pymysql.connect(host192.168.1.1, userroot, password123456, databaseorder)def write_sql(rows):sql (insert into order.TABLE(s_A,s_B) values(%s,%s)ON DUPLICATE key UPDATE s_Bvalues(s_B))conn getConn()cur conn.cursor()cur.executemany(sql, rows)conn.commit()cur.close()conn.close()