【Python】对Excel数据进行批量操作
前言:
因为博主所在的地方,需要每周整理全校的青年大学习数据,Excel操作本身不难,但是这种毫无意义的体力劳动做久了就会很无趣,刚好我想起来上学期接触过Python的Pandas模块,想着能不能试一下,取代这种无意义的劳动。
所用工具:
Pycharm 3.8(Python也可以)
Excel
Pandas库
Xlwt库
主要流程:
每周老师会发1M左右大小的.csv文件下来。
1.需要筛选出每个院有多少人看了。
2.再把每个院的团员数量填进去。
3.(每个院看了的人数)/(每个院的团员人数)=每个院的参与率
4.最底行再统计总人数和总参与率
这里城镇对应了学院
这是最终要的表格形式,此图的团员数量是后期调试方便随便输入的。本身操作不难,但每周总是得花点时间才能做完。
代码操作
之前上网查资料时,很多博主提醒打开文件的编码模式一定得是gbk,但我第一次的文件只能用UTF-8打开,但之后也有得用gbk才能打开的文件,这算是我踩过坑,大家知道就好。
#首先导入模块
import pandas as pd
import xlwt#导入文件
data = pd.read_csv(r'C:\Users\ASUS\Desktop\第九季第十三期源数据.csv', encoding = "gbk",error_bad_lines=False) #导入文件 encoding = 'UTF-8'
#筛选“城镇”列
data_gender = data[[ '城镇']]
#删掉用不到的列
data_gender_re = data_gender[data_gender.notnull()] #删掉无用项
每周的团员数量都是在变化的,所以我决定用输入的方式来确定这个量
#这里定义了一个函数,用户输入每周的团员数量
def getdata():liebiao1 = []liebiao1.append(int(input("A院团员人数:")))liebiao1.append(int(input("B院团员人数:")))liebiao1.append(int(input("C院团员人数:")))liebiao1.append(int(input("D院团员人数:")))liebiao1.append(int(input("E院团员人数:")))liebiao1.append(int(input("F院团员人数:")))liebiao1.append(int(input("G院团员人数:")))liebiao1.append(int(input("H院团员人数:")))liebiao1.append(int(input("I院团员人数:")))liebiao1.append(int(input("J团员人数:")))liebiao1.append(int(input("K院团员人数:")))liebiao1.append(int(input("L院团员人数:")))liebiao1.append(int(input("M院团员人数:")))liebiao1.append(int(input("N院团员人数:")))liebiao1.append(int(input("O学院团员人数:")))liebiao1.append(int(input("P院团员人数:")))liebiao1.append(int(input("Q院团员人数:")))return liebiao1
对“城镇”列的数据进行筛选,,将收集的数据传递给a(字典类型)
例如:a1={A:34} ,其中A是学院名称,34是数量
def screendata():F1 = data_gender_re.loc[(data_gender_re['城镇'] == 'A学院团委')]F2 = data_gender_re.loc[(data_gender_re['城镇'] == 'B工程学院团委')]F3 = data_gender_re.loc[(data_gender_re['城镇'] == 'C学院团委')]F4 = data_gender_re.loc[(data_gender_re['城镇'] == 'D学院团委')]F5 = data_gender_re.loc[(data_gender_re['城镇'] == 'E学院团委')]F6 = data_gender_re.loc[(data_gender_re['城镇'] == 'F学院团委')]F7 = data_gender_re.loc[(data_gender_re['城镇'] == 'G学院团委')]F8 = data_gender_re.loc[(data_gender_re['城镇'] == 'H学院团委')]F9 = data_gender_re.loc[(data_gender_re['城镇'] == 'I学院团委')]F10 = data_gender_re.loc[(data_gender_re['城镇'] == 'J学院团委')]F11 = data_gender_re.loc[(data_gender_re['城镇'] == 'K学院团委')]F12 = data_gender_re.loc[(data_gender_re['城镇'] == 'L学院团委')]F13 = data_gender_re.loc[(data_gender_re['城镇'] == 'M学院团委')]F14 = data_gender_re.loc[(data_gender_re['城镇'] == 'N学院团委')]F15 = data_gender_re.loc[(data_gender_re['城镇'] == 'O学院团委')]F16 = data_gender_re.loc[(data_gender_re['城镇'] == 'P学院团委')]F17 = data_gender_re.loc[(data_gender_re['城镇'] == 'Q学院团委')]#将字典a的信息传递给列表b# Aa1 = dict(F1['城镇'].value_counts())b1 = [list(a1) + list(a1.values())]# Ba2 = dict(F2['城镇'].value_counts())b2 = [list(a2) + list(a2.values())]# Ca3 = dict(F3['城镇'].value_counts())b3 = [list(a3) + list(a3.values())]# Da4 = dict(F4['城镇'].value_counts())b4 = [list(a4) + list(a4.values())]# Ea5 = dict(F5['城镇'].value_counts())b5 = [list(a5) + list(a5.values())]# Fa6 = dict(F6['城镇'].value_counts())b6 = [list(a6) + list(a6.values())]# Ga7 = dict(F7['城镇'].value_counts())b7 = [list(a7) + list(a7.values())]# Ha8 = dict(F8['城镇'].value_counts())b8 = [list(a8) + list(a8.values())]# Ia9 = dict(F9['城镇'].value_counts())b9 = [list(a9) + list(a9.values())]# Ja10 = dict(F10['城镇'].value_counts())b10 = [list(a10) + list(a10.values())]# Ka11 = dict(F11['城镇'].value_counts())b11 = [list(a11) + list(a11.values())]# La12 = dict(F12['城镇'].value_counts())b12 = [list(a12) + list(a12.values())]# Ma13 = dict(F13['城镇'].value_counts())b13 = [list(a13) + list(a13.values())]# Na14 = dict(F14['城镇'].value_counts())b14 = [list(a14) + list(a14.values())]# Oa15 = dict(F15['城镇'].value_counts())b15 = [list(a15) + list(a15.values())]# Pa16 = dict(F16['城镇'].value_counts())b16 = [list(a16) + list(a16.values())]# Qa17 = dict(F17['城镇'].value_counts())b17 = [list(a17) + list(a17.values())]#将列表b合并,此时data1是二维列表data1 = b1 + b2 + b3 + b4 + b5 + b6 + b7 + b8 + b9 + b10 + b11 + b12 + b13 + b14 + b15 + b16 + b17data2 = b1[0][1] + b2[0][1] + b3 [0][1] + b4 [0][1] + b5 [0][1] + b6 [0][1] + b7 [0][1] + b8 [0][1] + b9 [0][1] + b10 [0][1] + b11 [0][1] + b12 [0][1] + b13 [0][1] + b14 [0][1] + b15 [0][1] + b16 [0][1] + b17 [0][1]#下面俩是上面表格中的最底下两行,不参与计数,以要求的形式存在data1.append([])data1.append(['总计',data2])return data1
执行函数,将getdata返回的值给disanlie(第三列)
screendata()disanlie = getdata()
将两个列表合并在一起(列与列的合并)
screendata1 = [list(screendata()[i]) + [disanlie[i]] for i in range(len(screendata())-2)]
计算出每个学院的参与率disilie(第四列,这里老师要求是百分比,且保留小数点后一位,后面会讲到)
disilie = []
for i in range(17):disilie.append((float(screendata1[i][1])/(screendata1[i][2])))
将参与率disilie与上面整理的总表格合并(也是列与列的合并)
screendata2 = [list(screendata1[i]) + [disilie[i]] for i in range(len(screendata1))]
表格里的最后一行:参与人数总和、团员人数总和、总参与比,这里没什么好说的,注意数据别带错,简单的运算
canyurenshu = 0;tuanyuanrenshu = 0
for i in range(17):canyurenshu = screendata2[i][1] + canyurenshutuanyuanrenshu = screendata2[i][2] + tuanyuanrenshu
canyubi1 = (canyurenshu / tuanyuanrenshu)
float(canyubi1)
#老师要求总参与比为百分比,且小数点后两位(百分比后面再处理)
canyubi = ("%.2f%%" %(canyubi1*100))
表格中倒数第二行是空的,所以准备一个空列表,并将之前算好的数据全装进第二个列表。
zongjie1 = []
zongjie2 = ['总计',canyurenshu,tuanyuanrenshu,canyubi]
然后将上面准备好的最底两行与总表格合并
screendata2.append(zongjie1)
screendata2.append(zongjie2)
老师还要求(我内心其实是崩溃的~)学院按参与率由高到低排序,我这里采用了sorted函数,用key关键字进行排序,非常方便
screendata3=[]
for i in range(17):screendata3.append(screendata2[i])screendata4 = sorted(screendata3,key=lambda x: x[3],reverse=True)#这里将学院的参与率由float型转为小数点后一位的百分比
for i in range(17):screendata4[i][3] = str("%.1f" % (screendata4[i][3]*100)) + '%'screendata4.append(zongjie1)
screendata4.append(zongjie2)
最后生成Excel文件,大功告成
#pd.DataFrame(列表,每一列的列头)
df = pd.DataFrame(screendata4, columns=['学院','参与人数','团员人数','参与比'])df.to_excel(r'C:\Users\ASUS\Desktop\导出文件.xls',index=False,encoding = 'UTF-8')
第一次写这么长的博客,写的不好,代码太乱也没有整理,将就看着,下面写下一些我遇到的坑。
1.到后面已经可以生成文件了,如果Excel还开着,就Run程序,这个肯定会报错
2.编码问题,有些时候UTF-8才能运行,有时候gbk才能运行,不过基本上都是gbk才能运行
3.列表的行数、列数,思考调试列表的位置把我弄傻了都…
4.pd.DataFrame函数的columns是以一个列表的形式出现。你传入的列表数有n列,那么columns列表的元素就不能超过n
5.如果你保存的是.csv格式,那么你的小数点后一位的百分比格式,生成为.csv的时候,会自动给你多保留一位小数点,于是乎我才选择导入xlwt模块生成Excel文件
目前就想到这么多,欢迎补充~
【Python】对Excel数据进行批量操作相关推荐
- python读取excelsheet-一文看懂用Python读取Excel数据
原标题:一文看懂用Python读取Excel数据 导读:现有的Excel分为两种格式:xls(Excel 97-2003)和xlsx(Excel 2007及以上). Python处理Excel文件主要 ...
- python处理excel教程实例-python如何处理excel数据
python处理excel数据的方法:1.使用xlrd来处理:2.使用[xlutils+xlrd]来处理:3.使用xlwt来处理:4.使用pyExcelerator来处理:5.使用Pandas库来处理 ...
- python导入excel数据-Python数据处理之导入导出excel数据
欢迎点击上方"AntDream"关注我 .Python的一大应用就是数据分析了,而数据分析中,经常碰到需要处理Excel数据的情况.这里做一个Python处理Excel数据的总结, ...
- python将EXCEL数据导入数据库时日期型数据变成数字并加.0的问题一行代码解决方案方案
[问题描述]:python将EXCEL数据导入数据库时日期变成文本型数据并显示为数字格式 [解决方案] 数据源: codes: #!/usr/bin/python3 -- coding: utf-8 ...
- python读取excel送到网页_python怎么读取excel!怎么用python将excel数据写入网页中
怎么用python将excel数据写入网页中 # 装 xlrd-0.9.2 xlutils-1.7.1 这两个模 from xlwt import Workbook, Formula import x ...
- python接入excel_使用python将excel数据导入数据库过程详解
因为需要对数据处理,将excel数据导入到数据库,记录一下过程. 使用到的库:xlrd 和 pymysql (如果需要写到excel可以使用xlwt) 直接丢代码,使用python3,注释比较清楚. ...
- python对Excel数据进行读写操作
python对Excel数据进行读写操作 将学习到的基础操作记录在这里,便与复习查看 1.python读取Excel工作簿.工作表 import xlrd # 读取工作簿 wb=xlrd.open_w ...
- 用python处理excel表格_如何用python处理excel数据 | 用python处理excel表格数据类型
python 读取EXCEL文件中的数据格式 扩展库 xlrd 读excle xlwt 写excle 直上搜就能下载 下载后使用 import xlrd 就可以读excle了 打开文件: xls = ...
- Python进行Excel数据统计
Python进行Excel数据统计 前言 示例数据 前期思路 实操 遇到的问题和解决方案 最终结果 实现代码 总结 前言 貌似大家中使用到Excel数据统计和处理比较多.前两天GF发来指示,帮忙统计2 ...
- 《用 Python 处理 Excel 数据之正则表达式视频教程》 曾贤志
第1章 正则表达式常用函数与方法使用 正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查 一个串是否含有某种子串.对匹配成功的字符串进行提取. ...
最新文章
- 崛起的Python,真的影响了76万人?
- 征信上显示保险代偿记录,那你的信用基本就黑了
- 字符串匹配算法(BM)
- 生产性企业CO部分月结流程及系统步骤
- Nginx的这些妙用,你肯定有不知道的!
- 3d激光雷达开发(法向量预测)
- python filter函数_第九篇:Python中lambda、filter和map函数
- 在使用pydelicious时出现HTTP Error 500: Internal Server Error的错误的解决方法:
- 计算机启动过程过程图,计算机启动过程图文详解(一)----计算机初始化启动过程...
- Atitit 项目管理之时间管理之道 attilax著 艾龙 著 1. 项目活动的分解和定义	1 2. 第2章|项目活动定义与活动排序 13	1 3. 项目活动资源需求估计	2 4. 里程碑节点	2
- [CQOI 2018]社交网络
- unicode转gbk python_使用python实现GBK转unicode码查询表
- webstorm设置黑色背景
- DOS命令:diskpart
- Classic界面chatter中的子选项卡配置
- 爬取热榜数据,通过Qt界面显示,代码可直接运行(python3经典编程案例)
- 渗透测试流程 - 渗透测试的9个步骤
- 织梦dede文章列表调用标签的用法和规则
- 如何处理图片用matlab,如何使用matlab来批处理文件图片格式
- 阿里巴巴内推一面过程
热门文章
- 《乐高EV3机器人搭建与编程》——1.2 LEGO系列产品
- 设计模式10-责任链模式
- Picsew | 推荐一款长截图和长图拼接工具
- Feko仿真偶极子天线学习笔记
- 一文掌握FastDeploy Serving服务化部署(打造线上证件照制作系统,含完整代码)
- 重新装载oracle数据库
- CodeBlock 基本使用 与 设置断点和单步调试方法 与生活标准普尔图
- 实收资本和注册资本\营业执照和法人营业执照的区别
- 医学论文笔记:TMI2021 SMU-Net: Saliency-Guided Morphology-Aware U-Net for Breast Lesion Segmentation ...
- creator 求两个点的向量长度mag