前言:
一开始学python做数据处理(numpy库和pandas库),是因为听别人说“用python处理事情很高效”;啃了几个星期的书本后,觉得不对劲,这不就是用代码做Excel可以完成的事情吗?!当时还做了个图吐槽它......
我也是直到最近在做给量表算分的工作才开始懂得欣赏python的美,(也可以说是代码的美,毕竟数据分析这个事情,用matlab同样的好做!甚至一定程度上更好做!但谁让python开源而matlab贼贵呢...)
代码的优点:
1⃣️手动操作 - > 自动操作
这是一张从「问卷星」里面导出来的数据的截图,因为问卷题目很长,又需要算量表得分,这个时候就需要把每个表格拉窄,然后再拉插入新行,输入公式,再往下拉......但是实际上,这是写两行代码就可以完成的事情!
2⃣️重复劳动 - > 一次性劳动,多次使用
或许你看完上面之后说,用spss点点点点点点也可以呀,没有必要拉。是这样的没错,由于需要,我们的问卷要持续地发放,不定时地下载下来做实时的分析,所以不想重复地“点点点点点点”还是需要代码来实现。
进入正题:我需要的excel功能用什么函数实现
1⃣pandas库、Series和DataFrame的简介详见网页⬇️What kind of data does pandas handle?pandas.pydata.org
2⃣数据导入
import pandas as pd
#注意路径!
df = pd.read_excel("文件名.xlsx")
3⃣修改列(column)名
#将A改成a;将B改为b;将C改为c
#要修改的内容写成字典形式
df.rename(columns = {'A':'a',
'B':'b',
'C':'c'} inplace = True)
4⃣计算量表得分
目前我只会单独把量表拿出来计算,然后再把算出来的结果拼接回去
#将量表取出,放置于变量名'Scale_A'下
#方法一:列出量表的条目进行比对,将匹配条目的列取出
Scale_A = df.loc[:,['Scale_A_title1',
'Scale_A_title2',
'Scale_A_title3',
'Scale_A_title4']]
#方法二:定位条目所在的列
#如下Scale_A的条目位于Excel表格的第10至17列
Scale_A = df.iloc[:,9:17]
#计算量表得分,并将得分结果放置在命名为'Scale_A得分'的新列中
Scale_A['Scale_A得分'] = Scale_A.apply(lambda x: x.sum(), axis=1)
#如果要反转计分
#将要反转题目的columns名列出,用df.apply.()函数写公式进行反转
for i in ['Scale_A_title1','Scale_A_title2','Scale_A_title3',
'Scale_A_title4']:
Scale_A[i] = Scale_A[i].apply(lambda x: 5-x)
#将算出得分加入至变量df中
df = pd.concat([data_ini,Scale_A['Scale_A得分']],axis=1)
df.loc()和df.iloc()函数的用法有什么区别?
df.loc()根据标签选择DataFrame中行/列;
df.iloc()根据整数位置选择行/列。
5⃣根据列删除不需要的信息
df_final = df.drop(["序号","提交答卷时间","所用时间","来源详情","来自IP"],axis = 1)
6⃣将整理好的df_final写入一个新的excel表
data_final.to_excel('问卷数据_已求量表得分.xlsx','Sheet1')
写到这里就大功告成啦!
这个帖子会根据我“学习情况”不定期更新补充哒!