1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 【Python】对Excel数据进行批量操作

【Python】对Excel数据进行批量操作

时间:2023-01-31 05:09:17

相关推荐

【Python】对Excel数据进行批量操作

前言:

因为博主所在的地方,需要每周整理全校的青年大学习数据,Excel操作本身不难,但是这种毫无意义的体力劳动做久了就会很无趣,刚好我想起来上学期接触过PythonPandas模块,想着能不能试一下,取代这种无意义的劳动。

所用工具:

Pycharm 3.8(Python也可以)

Excel

Pandas库

Xlwt库

主要流程:

每周老师会发1M左右大小的.csv文件下来。

1.需要筛选出每个院有多少人看了。

2.再把每个院的团员数量填进去。

3.(每个院看了的人数)/(每个院的团员人数)=每个院的参与率

4.最底行再统计总人数和总参与率

这里城镇对应了学院

这是最终要的表格形式,此图的团员数量是后期调试方便随便输入的。本身操作不难,但每周总是得花点时间才能做完。

代码操作

之前上网查资料时,很多博主提醒打开文件的编码模式一定得是gbk,但我第一次的文件只能用UTF-8打开,但之后也有得用gbk才能打开的文件,这算是我踩过坑,大家知道就好。

#首先导入模块import pandas as pdimport 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 = 0for i in range(17):canyurenshu = screendata2[i][1] + canyurenshutuanyuanrenshu = screendata2[i][2] + tuanyuanrenshucanyubi1 = (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文件

目前就想到这么多,欢迎补充~

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。