网站首页 > 文章精选 正文
在日常数据分析的业务场景下,我们经常会遇到以下难题:
- 如何批量导入不同工作簿不同Sheet表下的数据?
- 如何将这些不同Sheet表下的数据合并为一个数据?
- 如何将合并的数据导入数据库?
本文构造一组数据,批量合并后导入数据库保存,下面一起来学习。
本文使用工具:Python 3.7.0
本文使用的模块:pandas、os、pymysql
适用范围:数据批量导入与合并,数据库留存
批量数据导入并合并
首先构建10个工作簿,每个工作簿下面有三个Sheet表。
每一个分别Sheet表包含ID、number、sale三个字段。
导入相关的库,在数据批量导入及合并的时候,使用到pandas和os两个库。
#导入相关的库
import pandas as pd
import os
这里介绍一下os.listdir命令,他可以将一个数据文件内的所有文件名都读取出来,如下图就是读取的文件名,包含那十个工作簿。
os.listdir(r'C:\Users\尚天强\Desktop\测试数据')
使用read_excel命令读取一个Excel文件。
df = pd.read_excel(r'C:\Users\尚天强\Desktop\测试数据\测试数据1.xlsx')
df.head()
首先构建一个空的列表,里面没有任何数值,同时,在开始部分就定义数据的导入路径、导出路径、以及保存的文件名。
import pandas as pd
import os
#构建一个空的列表
dfs = []
read_path=r'C:\Users\尚天强\Desktop\测试数据'
save_path=r'C:\Users\尚天强\Desktop'
save_name='out_table.xlsx'
接下来是循环遍历每一个文件的名称,并且遍历的文件名不能为保存的文件名,sheet_name=None表示读取每一个Sheet表下的数据,skiprows=1,header=None取消标题,跳过第一行,只保留数据内容,使用extend命令将遍历的这些数据内容上下拼接起来。
for fname in os.listdir(read_path):
if fname.endswith(".xlsx") and fname !=save_name:
df = pd.read_excel(read_path+"\\"+fname,skiprows=1,header=None,sheet_name=None)
dfs.extend(df.values())
使用concat命令将每一个工作簿的数据拼接起来。
#合并
result = pd.concat(dfs)
在导出数据的时候,使用header命令给表格加一个标题,批量导入数据并合并的结果如下所示。
#导出数据
result.to_excel(save_path+"\\"+save_name,index=False,header=['id','number','sale'])
使用第一种方法合并数据,发现有重复值,可以使用drop_duplicates参数去除重复值,使用sort_values参数进行排序,去除重复值并且排序的数据结果如下所示。
import pandas as pd
import os
dfs = []
read_path=r'C:\Users\尚天强\Desktop\测试数据'
save_path=r'C:\Users\尚天强\Desktop'
save_name='out_table.xlsx'
for fname in os.listdir(read_path):
if fname.endswith(".xlsx") and fname !=save_name:
df = pd.read_excel(read_path+"\\"+fname,skiprows=1,header=None,sheet_name=None,names=['id','number','sale']) #这里需要用names函数命名,不然没法去重和排序
dfs.extend(df.values())
#合并
result = pd.concat(dfs)
#根据ID去除重复值
result.drop_duplicates(subset='id',keep='first',inplace=True)
#降序排列
result.sort_values(by='sale',ascending=False,inplace=True)
#导出数据
result.to_excel(save_path+"\\"+save_name,index=False,header=['id','number','sale'])
数据导入数据库
将数据导入数据库,这里还是使用上面的数据文件,连接数据库使用的模块为pymysql。
#读入数据
data = pd.read_csv(r'C:\Users\尚天强\Desktop\out_table.csv',engine='python')
data.head()
#导入需要使用到的数据模块
import pandas as pd
import pymysql
数据库连接,host为数据库地址、user为用户名、password为密码、db为数据库的名字、port为端口,默认为3306。
# 建立数据库连接
con = pymysql.connect(host='127.0.0.1',
user='root',
password='123456',
db='demo',
port=3306)
获取游标对象。
# 获取游标对象
cursor = con.cursor()
用数据库demo,'USE demo' 也是数据库内的SQL语言。
#使用数据库demo
cursor.execute('USE demo')
构造一个test表,包含ID、number、sale三个字段。
cursor.execute('create table if not exists test (
ID char(4) primary key,
number int,
sale float)'
)
向表test表内插入数据。
#插入数据语句
query = "insert into test(ID,number,sale)values (%s,%s,%s)"
迭代读取每行数据,转化数据类型,将其保存在values内。
#迭代读取每行数据,values中元素有个类型的强制转换,否则会出错
for r in range(0, len(data)):
ID = data.iloc[r,0]
number = data.iloc[r,1]
sale = data.iloc[r,2]
values = (str(ID),int(number),float(sale))
cursor.execute(query, values)
关闭游标,提交,关闭数据库连接。
#关闭游标,提交,关闭数据库连接,如果没有这些关闭操作,执行后在数据库中查看不到数据
cursor.close()
con.commit()
con.close()
打印数据
# 建立数据库连接
con = pymysql.connect(host='127.0.0.1',
user='root',
password='123456',
db='demo',
port=3306)
# 获取游标对象
cursor = con.cursor()
首先执行SQL命令,'select * from test'表示查询test表内的所有数据,循环遍历数值,将它打印出来。
#查询数据库并打印内容
cursor.execute('select * from test')
result = cursor.fetchall()
for values in result:
print(values)
打印出来的结果可以看到,第一列是字符串,第二列是整型,第三列是浮点型。
#关闭
cursor.close()
con.commit()
con.close()
导入数据库后的结果如下所示:
猜你喜欢
- 2025-07-02 python如何操作SQL Server数据库?
- 2025-07-02 MySQL常用命令汇总(mysql常用命令大全)
- 2025-07-02 面试官:select语句和update语句分别是怎么执行的?
- 2025-07-02 MySQL的XtraBackup进行备份和恢复
- 2025-07-02 了解 SQL 语言特点、分类及规则(sql语言包括哪三种类型)
- 2025-07-02 数据库融入DevOps基因后,运维再也不用做背锅侠了
- 2025-07-02 Git Rebase(git rebase命令)
- 2025-07-02 Sequelize 在 Node.js 中的详细用法与使用笔记
- 2025-07-02 新课标高中教材1030个短语大汇总(新课标高中必备篇目60篇)
- 2025-07-02 达梦存储过程模板和达梦创建分区存储过程
- 07-02Docker Compose 使用说明(docker-compose init)
- 07-02第十一节 Docker Compose 全面指南:从多容器部署到生产实践
- 07-02docker系列:docker-compose用法详解
- 07-02Docker Compose(docker compose安装)
- 07-02docker-compose 示例分享(docker compose privileged)
- 07-02Docker Compose 配置更新指南(docker -compose)
- 07-02Docker集群管理之Docker Compose(docker 集群方案)
- 07-02python如何操作SQL Server数据库?
- 最近发表
-
- Docker Compose 使用说明(docker-compose init)
- 第十一节 Docker Compose 全面指南:从多容器部署到生产实践
- docker系列:docker-compose用法详解
- Docker Compose(docker compose安装)
- docker-compose 示例分享(docker compose privileged)
- Docker Compose 配置更新指南(docker -compose)
- Docker集群管理之Docker Compose(docker 集群方案)
- python如何操作SQL Server数据库?
- MySQL常用命令汇总(mysql常用命令大全)
- Ctrl+Enter,1秒批量合并数据并导入数据库的办法,你学会了吗?
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)
- mysql数据库面试题 (57)