用python操作excel表格,进行数据分析
项目场景:
提示:通常我们对excel表格进行删除多个项的时候,如果一条一条的删除就会花费很多时间,并且也不知道要删除的部分是否删除完,进行查询,分类的时候用python语言几条语句就能简单的完成要求。
例如:从一个有很多条学生信息的excel表中按要求进行操作
代码展示:
首先在软件中导入excel表格,即用python打开csv文件
from pandas import Series,DataFrame
import pandas as pd
import numpy as np
import csv
import codecs
data_csv = pd.read_csv("d:/shiyan.csv",encoding = "gbk")
data_csv #就能在python软件中打印出要查找的信息
将数据以文件形式导出保存
data_csv.to_csv('d:/1.csv') #以csv形式存储
data_csv = data_csv.to_excel("d:/1.xls") #以excel表形式存储
删除后两列所有信息
data_csv = data_csv.drop(['任选课类别_显示值','考试类型_显示值'],axis=1)
针对表中的字要修改的进行统一修改
data_csv=data_csv.replace(['合格','良好'],[60,80])#军训分数栏的文字修改为分数合格对应60分,良好对应80分
特定要求筛选
data0_csv = data_csv[data_csv['学号']>20120000] #筛选出学号大于2012000的学生信息
data0_csv = data_csv[data_csv['院系_显示值'] == '文学与新闻传播学院'] #从所以的信息总分离出文传学院的数据
TeamID1 = data_csv[data_csv['TeamID'] == 1] #显示出第一学期的数据
分组
#group用来分组
group = TeamID1['成绩'].groupby(TeamID1['学号']) #以每个学号进行分组,并保留下每个学号的每个课成绩
#agg用来聚合
a = group.agg(['sum']+['mean']+['max']+['min']+['count'])
用python函数对成绩进行分析,count=9表明有9门学科
a.columns=['总分','每学期该专业平均分','每学期该专业最高分','每学期该专业最低分','每学期该专业考试门数']
分别用迭代递归缓存求斐波拉契数列
from tkinter import *
import easygui
import time
master = Tk()
frame = Frame(master) # 确定一个框架用于美观
frame.pack(padx = 20,pady = 20)
v1 = StringVar() # 分别用于储存需要计算的数据和 结果
v2 = StringVar()
v3 = StringVar()
v4 = StringVar()
v5 = StringVar()
v6 = StringVar()
def test(content):
return content.isdigit() # 检查是不是数字 .
testCMD = frame.register(test) # 将函数 进行包装 .
Label(frame,text='迭代算法:',padx=10).grid(row=0,column=0)
# %p 是输入框的最新内容 . 当输入框允许改变的时候该值有效 ,
Label(frame,text='输入项数:',padx=10).grid(row=0,column=2)
e2 = Entry(frame,width=10,textvariable=v1,validate='key',\
validatecommand=(test,'%p')).grid(row=0,column=3)
Label(frame,text='结果',padx=10).grid(row=0,column=4)
e3 = Entry(frame,width=15,textvariable=v2,state='readonly').grid(row=0,column=5)
Label(frame,text='花费时间:',padx=10).grid(row=0,column=6)
e4 = Entry(frame,width=15,textvariable=v3,state='readonly').grid(row=0,column=7)
Label(frame,text='递归算法:',padx=10).grid(row=1,column=0)
# %p 是输入框的最新内容 . 当输入框允许改变的时候该值有效 ,
Label(frame,text='输入项数:',padx=10).grid(row=1,column=2)
e5 = Entry(frame,width=10,textvariable=v4,validate='key',\
validatecommand=(test,'%p')).grid(row=1,column=3)
Label(frame,text='结果',padx=10).grid(row=1,column=4)
e6 = Entry(frame,width=15,textvariable=v5,state='readonly').grid(row=1,column=5)
Label(frame,text='花费时间:',padx=10).grid(row=1,column=6)
e7 = Entry(frame,width=15,textvariable=v6,state='readonly').grid(row=1,column=7)
def calc():
if v1.get()=='':
easygui.msgbox('请先输入内容 !')
return
result1 = fibonacci3(12)
v2.set(result1)
result2 = Time3()
v3.set(result2)
def calc():
if v4.get()=='':
easygui.msgbox('请先输入内容 !')
return
result1 = fibonacci1()
v5.set(result1)
result2 = Time3()
v6.set(result2)
"""def test():
if e1.get() == 'f1':
print("正确")
fibonacci3(10)
#
return True
else:
fibonacci3(5)
print('错误')
e1.delete(0,END)
return False """
#递归
def fibonacci1(n):
# base case
if n==0 or n==1:
return 1
# recurssive case
else:
return fibonacci1(n-1) + fibonacci1(n-2)
#print ([fibonacci1(i) for i in range(32)])
def Time3():
start_CPU = time.clock()
fibonacci3(32)
end_CPU = time.clock()
return end_CPU - start_CPU
def fibonacci3(n):
a, b = 0, 1
for i in range(1, n+1):
a, b = b, a+b
return b
#print ([fibonacci3(i) for i in range(32)])
Button(frame,text='结果1',command=calc).grid(row=4,column=3,pady=15)
Button(frame,text='结果2',command=calc).grid(row=4,column=4,pady=15)
mainloop()
斐波拉契数列:
def calc1():
if v1.get()=='':
easygui.msgbox('请先输入内容 !')
return
result1 = fibonacci1(v1.get())
v2.set(result1)
result2 = Time1()
v3.set(result2)
def fibonacci1(n):
a, b = 0, 1
for i in range(1, n+1):
a, b = b, a+b
return b
#迭代
def Time1(n):
start_CPU = time.clock()
fibonacci1(n)
end_CPU = time.clock()
return end_CPU - start_CPU
知识扩充:
CSV:
csv是最通用的一种文件格式,它可以非常容易地被导入各种PC表格及数据库中。此文件,一行即为数据表的一行。生成数据表字段用半角逗号隔开。csv文件用记事本和excel都能打开,用记事本打开显示逗号,用excel打开,没有逗号了,逗号都用来分列了,还可有Editplus打开。
python常用的科学计算库:
Numpy:
Pandas
Scipy