需求1:用一条SQL语句删除除了自动编号不同,其他都相同的学生冗余信息
假设学生表数据字典如下:
Student——学生表
Id——自动编号
SId——学生编号
Sname——学生姓名
CId——课程编号
Cname——课程名称
Score——分数
解题思路:
首先对自动编号以外的字段进行分组(也就是筛选出非重复的信息)得到临时表,再对两表进行联结操作,删除副表中自动编号为null的信息(也就是重复信息)
sql语句:
delete *
from Student as b
left join
(select min(SId)
from Student
groupby SId,Sname,CId,Cname,Score) as a
on b.SId= a.SId
where a.SId is null;
需求2:用一条SQL语句显示所有可能的比赛组合
sql语句:
select *
from team as a,team as b
where a.name>b.name;
需求1:理解DataFrame.reset_index函数中drop,append,inplace参数的作用
解答1:
drop参数(默认为false):
drop=True: 原有的索引不变添加列名index,同时在新列上重置索引。
drop=False:在原有的索引列重置索引,不再另外添加新列
inplace参数(默认为false):
inplace=True:不创建新的对象,直接对原始对象进行修改;
inplace=False:对数据进行修改,创建并返回新的对象;
reset_index()函数好像没有append参数...求解
需求2:如何将df2附加到df1的末尾
df1= pd.concat([df1,df2],axis=1)
需求3:如何正确理解if_name==‘main'
通俗的理解name == 'main':假如你叫小明.py,在朋友眼中,你是小明(name == '小明');在你自己眼中,你是你自己(name == 'main')。
if name == 'main'的意思是:当.py文件被直接运行时,if name == 'main'之下的代码块将被运行;当.py文件以模块形式被导入时,if name == 'main'之下的代码块不被运行
具体见参考链接
需求4:for in range()的作用是什么
主要作用就是遍历循环。
用法介绍如下:
以for i in range ()为例:
range()是函数,for i in range () 就是给i赋值。
比如 for i in range (1,3):
就是把1,2依次赋值给i
range () 函数的使用举例如下:
range(3)即:从1到3,不包含3,即0,1,2
range(1,3) 即:从1到3,不包含3,即1,2
range(1,3,2)即:1,2。第三个数字2是代表步长。如果不设置,就是默认步长为1
一些个人对for循环在pandas中使用的理解:
1.pandas在dataframe的操作中,很多数据处理内建函数都能实现。一般没必要遍历整个df去操作
比如缺失值填充fillna,值替代replace。
2、一些复杂的操作需要遍历列做自定义函数处理,结合map、apply等,这个可以理解。
例如:CD用户消费行为中的用户分层、回购率计算的代码实现,黑五案例中求年龄维度的人数计算、Adventure项目中for循环结合pct_change()函数实现单月环比计算。
操作题目:
需求1:使用Python读取excel数据,保存到mysql
#导入模块
import pymysql
pymysql.install_as_MySQLdb()
from sqlalchemy import create_engine
#读取excel文件
df=pd.read_excel(r'C:\Users\dell\Desktop\Python\项目\第一部分\表格制作\城市销量2.xlsx')
#存储至Mysql
lengine = create_engine("mysql://{}:{}@{}/{}?charset={}".format('username', 'password', '106.15.00:3306', 'test1','utf8'))
con =engine.connect()#创建连接
.to_sql(name ='test1_ben',con=con,if_exists='append',index =False)