需求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:不創(chuàng)建新的對象澄成,直接對原始對象進行修改;
inplace=False:對數據進行修改胧洒,創(chuàng)建并返回新的對象;
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()的作用是什么
主要作用就是遍歷循環(huán)粥谬。
用法介紹如下:
以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循環(huán)在pandas中使用的理解:
1.pandas在dataframe的操作中,很多數據處理內建函數都能實現持隧。一般沒必要遍歷整個df去操作
比如缺失值填充fillna即硼,值替代replace。
2屡拨、一些復雜的操作需要遍歷列做自定義函數處理只酥,結合map、apply等呀狼,這個可以理解裂允。
例如:CD用戶消費行為中的用戶分層、回購率計算的代碼實現哥艇,黑五案例中求年齡維度的人數計算绝编、Adventure項目中for循環(huán)結合pct_change()函數實現單月環(huán)比計算。
操作題目:
需求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()#創(chuàng)建連接
.to_sql(name ='test1_ben',con=con,if_exists='append',index =False)