项目场景:

提示:这里简述项目相关背景:最近ETL数据处理中需要把100多个excel导入的数据库(MySQL),但是excel的列是不一样的,如果手工粘贴的话,需要很多时间还可能遗漏。

例如:项目场景:示例:通过蓝牙芯片(HC-05)与手机 APP 通信,每隔 5s 传输一批传感器数据(不是很大)

这些数据大小是200M内,100万行内

问题描述

提示:这里描述项目中遇到的问题:文件列数不同,且需要转换

例如:这个16列的

这个是17列的

同时还有其它列数的文件,这里不再列出

解决方案:

提示:这里填写该问题的具体解决方案:
1 获取所有Exel文件
2 数据处理
3 写入数据库
4 数据核验
5 数据合并

1 获取数据文件

def get_file_path(rootfile, file_list: list, dir_list: list):"""获取指定路径下的所有文件:param rootfile: 指定文件夹:param file_list: 文件夹下的文件夹列表:param dir_list: 文件夹下的文件列表"""dir_or_files = os.listdir(rootfile)for dir_file in dir_or_files:dir_file_path = os.path.join(rootfile, dir_file)if os.path.isdir(dir_file_path):file_list.append(dir_file_path)get_file_path(dir_file_path, file_list, dir_list)else:dir_list.append(dir_file_path)

2 数据处理
数据处理包括,列名修改,数据过滤,添加列

def getDateFrame(filename):"""获取文件对应的dataframe:param filename: 需要读取的文件名:return: 处理后的dataframe"""# 读取文件excelfile = pd.read_excel(filename, sheet_name='新的工作表', engine='xlrd')# 对不同列数据进行转换if excelfile.columns.size == 16:# 修改列名cdf = excelfile.rename(columns={'Unnamed: 0': '月', 'Unnamed: 1': '日', 'Unnamed: 2': '业务日期', 'Unnamed: 3': '凭证号', 'Unnamed: 4': '分录号', 'Unnamed: 5': '摘要', 'Unnamed: 6': '科目编码', 'Unnamed: 7': '科目名称', 'Unnamed: 8': '辅助项', 'Unnamed: 9': '币种', 'Unnamed: 10': '借方原币', 'Unnamed: 11': '借方本币', 'Unnamed: 12': '贷方原币', 'Unnamed: 13': '贷方本币', 'Unnamed: 14': '核销信息', 'Unnamed: 15': '结算信息'})# 过滤指定数据dcfs = cdf[cdf["币种"].isin(['人民币', '港币', '美元', '欧元'])].copy()# 添加特定列dcfs.loc[:, '业务主体'] = str.split(filename, '\\')[3]# 返回数据dataframereturn dcfs[["业务日期", "凭证号", "科目编码", "科目名称","币种", "借方原币", "借方本币", "贷方原币", "贷方本币", "业务主体"]]if excelfile.columns.size == 17:cdf = excelfile.rename(columns={'Unnamed: 0': '月', 'Unnamed: 1': '日', 'Unnamed: 2': '业务公司', 'Unnamed: 3': '业务日期', 'Unnamed: 4': '凭证号', 'Unnamed: 5': '分录号', 'Unnamed: 6': '摘要', 'Unnamed: 7': '科目编码', 'Unnamed: 8': '科目名称', 'Unnamed: 9': '辅助项', 'Unnamed: 10': '币种', 'Unnamed: 11': '借方原币', 'Unnamed: 12': '借方本币', 'Unnamed: 13': '贷方原币', 'Unnamed: 14': '贷方本币', 'Unnamed: 15': '核销信息', 'Unnamed: 16': '结算信息'})dcfs = cdf[cdf["币种"].isin(['人民币', '港币', '美元', '欧元'])].copy()dcfs.loc[:, '业务主体'] = str.split(filename, '\\')[3]return dcfs[["业务日期", "凭证号", "科目编码", "科目名称","币种", "借方原币", "借方本币", "贷方原币", "贷方本币", "业务主体"]]

返回的Dataframe的格式是统一的,方便写入数据库。

3 写入数据库
采用dataframe.tosql写入数据库,模式为追加

# 创建的数据库引擎
engine = create_engine('mysql+pymysql://root:123456@localhost:3306/test?charset=utf8')
# 创建session类型
DBSession = sessionmaker(bind=engine)
# 实例化官宣模型 - Base 就是 ORM 模型
Base = declarative_base()
# 创建服务单表
class fileinfo(Base):__tablename__ = 'fileinfo'id = Column(Integer, primary_key=True, autoincrement=True)filename = Column(String(268), comment='文件名')lines = Column(Integer, comment='数量')# 创建数据库 如果数据库已存在 则不会创建 会根据库名直接连接已有的库
def init_db():Base.metadata.create_all(engine)for excel_file in dir_list:if os.path.getsize(excel_file) > 0:susscces_file.append(excel_file)df = getDateFrame(excel_file)filename = str.split(excel_file, '\\')[3]df.to_sql(filename, engine, if_exists='append', index=False)

4 数据核验
每完成一个文件是把文件信息收集起来

    session = DBSession()for excel_file in dir_list:if os.path.getsize(excel_file) > 0:df = getDateFrame(excel_file)filename = str.split(excel_file, '\\')[3]df.to_sql(filename, engine, if_exists='append', index=False)session.add(fileinfo(os.path.basename(excel_file),df.size))session.commit()session.close()

抽取数据要保证数据的完整性,这里可以抽取部分文件数据进行比对

5 数据合并
这个可以在数据库中直接操作,;利用union all 的方式把数据合并起来

Pandas大量Excel数据写入Mysql相关推荐

  1. python导入excel数据到mysql

    python导入excel数据到mysql 使用多线程,目前大概一分钟写入1w条 环境介绍 windows10-x64 python3.6.5-x64 Excel2016 MySql5.7.18 需要 ...

  2. Python实现Excel数据导入MySQL

    前言 近年来,数据分析正在改变我们的工作方式,数据分析的相关工作也越来越受到人们的青睐.很多编程语言都可以做数据分析,比如Python.B.Matlab等,Python凭借着自身无可比拟的优势,被广泛 ...

  3. C#实战028:OleDb操作-Excel数据写入

    前面写了C#实战021:OleDb操作-新增Excel中的sheet工作表,接下来我们就要在新增的表中添加数据了,在网上找了很多方法,都没有OleDb对excel表操作批量操作,后来通过对mysql的 ...

  4. 股票数据写入MySQL——从零到实盘9

    前文介绍了MySQL的安装和配置过程,本文记录将股票数据写入到MySQL的过程. 安装pymysql 使用python实现与MySQL的数据读写时,需要安装相关的包.由于我们搭建开发环境时选择的是An ...

  5. python在excel中的应用-Python利用pandas处理Excel数据的应用详解

    最近迷上了高效处理数据的pandas,其实这个是用来做数据分析的,如果你是做大数据分析和测试的,那么这个是非常的有用的!!但是其实我们平时在做自动化测试的时候,如果涉及到数据的读取和存储,那么而利用p ...

  6. python与excel的应用-Python利用pandas处理Excel数据的应用

    最近迷上了高效处理数据的pandas,其实这个是用来做数据分析的,如果你是做大数据分析和测试的,那么这个是非常的有用的!!但是其实我们平时在做自动化测试的时候,如果涉及到数据的读取和存储,那么而利用p ...

  7. python读取excel送到网页_python怎么读取excel!怎么用python将excel数据写入网页中

    怎么用python将excel数据写入网页中 # 装 xlrd-0.9.2 xlutils-1.7.1 这两个模 from xlwt import Workbook, Formula import x ...

  8. python读取串口数据保存到mysql数据库_Python3读取Excel数据存入MySQL的方法

    Python是数据分析的强大利器. 利用Python做数据分析,第一步就是学习如何读取日常工作中产生各种excel报表并存入数据中,方便后续数据处理. 这里向大家分享python3如何使用xlrd读取 ...

  9. python写入mysql数据库_python调用http接口,数据写入mysql数据库并下载录音文件

    写个脚本一共完成了三件事: 第一,python调用http接口, 第二,把调用到的数据写入mysql数据库, 第三,python调用wsdl接口,获取录音文件, import time import ...

最新文章

  1. mysql建索引 字段截取_提高MySQL索引策略一:隔离查询列
  2. 清华大学-刘知远:自然语言理解难在哪儿?
  3. 2019年湘潭大学程序设计竞赛(重现赛)补题:H.Chat(分组背包)
  4. 获取Android手机的分辨率通过ADB命令
  5. 电大计算机考试题目excel,电大计算机考试复习题EXCEL部分
  6. Spring学习笔记专题一
  7. const关键字在c语言的作用,C语言const关键字作用
  8. Android WebView重定向问题的解决方案
  9. telnet直接登录POP3
  10. 人脸识别示例代码解析(二)——人脸识别解析
  11. 新冠最新研究进展(2021年11月)
  12. android如何设置透明字体颜色,Android设置字体透明度
  13. 在微信公众号中html5页面跳转页面,微信公众号自定义菜单如何将点击动作换成跳转到网页...
  14. java实现支付宝扫码付款
  15. mac终端查看IP信息
  16. 稀土配合物Ln(DBM)3(Cz-PBM)|Tb(DBM)3(Cz-PBM)|Gd(DBM)3(Cz-PBM)|Ir(L)2(DBM-Ox)Ir(L)2(DBM-Cz)qiyue
  17. cocos creator周边工具开发【spine预览】小记
  18. wo-27s管理员账户和密码_某数据监测与分析系统可被撞库出登录密码
  19. 关于js表格固定列实现
  20. Linux内核 之 IPC概述

热门文章

  1. 编程已正式列入高考!孩子的未来, 不仅仅与语数英有关!
  2. Android 进阶14:源码解读 Android 消息机制( Message MessageQueue Handler Looper)
  3. ThinkCMF知识点汇总
  4. WanAndroid,一款每日推荐优质文章App
  5. 农产品商城毕业设计,农产品销售系统毕业设计,农产品电商毕业设计论文方案需求分析作品参考
  6. 特征选择:概述与方法
  7. python 函数的参数 (必看)
  8. 解决新建springboot项目时包导不进来的问题sun.security.provider.certpath.SunCertPathBuilderException: unable to f,已解决
  9. 图像几何变换--缩放、平移、镜像、旋转
  10. antd Modal