今天做了一个使用Python处理数据的小Demo
- 我使用的是mysql,先看一下数据库信息
学生信息表,表名为test11_12
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/eb0686152d7a76cbad6ce7b380e5062e.png)
班级专业表,表名test11_12_
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/7f1b748faa0c20be8cb673a402608b1c.png)
- 使用的Python库有pandas,numpy,首先先看一下要求:
使用的Python库有pandas,numpy,首先先看一下要求:
1、使用Python读取数据,添加专业信息。
2、对为空的数据填充为60分。
3、处理异常数据,小于0的修改为0,大于100的修改为100。
4、计算总成绩。
5、最后导出csv,xls文件。
以下是处理后的数据展示
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/42226f518d0d6703b05bdbaa8080e829.png)
- 进入正题,上代码
import pymysql
import pandas as pd
import numpy as np
db=pymysql.connect("localhost","root","123456","kettle")
# 输出字典,Python小白一个,只能先这样写,不然到下面游标时数据显示的不对
# 加‘pymysql.cursors.DictCursor’是为了输出字典
cur_information=db.cursor(pymysql.cursors.DictCursor)
cur_grade=db.cursor(pymysql.cursors.DictCursor)
# 在此我使用的是分开查询,最后合并,因为numpy处理数据时面对字符串是会报错,不支持
# 输出学生信息
sql01='''SELECT
test11_12.`学号`,
test11_12.`姓名`,
test11_12.`性别`,
test11_12_.`班级`,
test11_12_.`专业`
FROM
test11_12 inner join test11_12_ on test11_12.班级=test11_12_.班级'''
# 输出学生成绩信息
sql02='''SELECT
test11_12.`高数`,
test11_12.`英语`,
test11_12.`大数据技术`
FROM
test11_12 '''
# 这里返回的是int类型的整数,多少行数据
# 以下需要把字典转化为 DataFrame,以便最后数据整合
information01=cur_information.execute(sql01)
information02=pd.DataFrame(cur_information.fetchall())
grade01=cur_grade.execute(sql02)
grade02=pd.DataFrame(cur_grade.fetchall())
db.close()
# 处理空值,填充为60
grade_null=grade02.fillna(60)
# 处理不规则数据,数据范围为0~100,超出100的修改为100,低于0的修改为0
grade_error=np.array(grade_null)
grade_error[grade_error<0]=0
grade_error[grade_error>100]=100
grade03=pd.DataFrame(grade_error)
# print(grade03)
# 求和,处理后的各科成绩求和输出,添加一列的头为‘sum’
grade03['sum']=grade03.apply(lambda x:x.sum(),axis=1)
grade03.loc['sum']=grade03.apply(lambda x:x.sum())
# 查看一下数据是否处理正常
# print(information02)
# print(grade03)
# DataFrame()数据合并
meger_data=pd.merge(information02,grade03,left_index=True,right_index=True)
# print(meger_data.values.tolist())
# 输出csv
colum=['学号','姓名','性别','班级','专业','高数','英语','大数据技术','成绩总和']
# DataFrame需要转化为list,不添加index=False输出的数据第一列会有索引,不好看,去掉
out_csv=pd.DataFrame(columns=colum,data=meger_data.values.tolist())
out_csv.to_csv('D:/Desktop/Program/Python/Exercise/test/test11_12/data/information.csv',index=False)
# 输出excel,别的方法还不会,这里就用csv文件转为Excel,
out_excel=pd.read_csv('D:/Desktop/Program/Python/Exercise/test/test11_12/data/information.csv',sep=',')
out_excel.to_excel('D:/Desktop/Program/Python/Exercise/test/test11_12/data/information.xls',index=False)