一、轉置:T函數(shù)
df.T
二、排序:sort函數(shù)
數(shù)據(jù)框排序:
df.sort_values(by = '編號')
數(shù)組排序:
df.編號.sort_values()? ##區(qū)別:這個只顯示對應列
降序:(默認是升序)
df.sort_values(by = '編號',ascending = False)
多列排序:
df.sort_values(['編號','網(wǎng)站情況'] ,ascending = False)
三涣觉、排名賦值:rank函數(shù)
df['rank']=df.編號.rank()
有一個特殊情況: 數(shù)值一樣的話嚷节,排名可以按照不同的方式排列吞鸭,可以在method參數(shù)配置不同的值
df['rank']=df.編號.rank(method='min')
min表示最小值俊扳,也是我們日常見到的
max最大值
默認是平均值
first不考慮并列情況,按照順序排序
四抄淑、查重復值:unique函數(shù),結果顯示的唯一值
針對的是數(shù)組級別
df.網(wǎng)站情況.unique()
五屠凶、對重復計數(shù)value_counts()
針對的是數(shù)組級別
df.網(wǎng)站情況.value_counts()
六、描述統(tǒng)計describe()
針對數(shù)值
df.describe()
指定某一列
df.編號.describe()
所以還可以是這樣的函數(shù)肆资,min阅畴,max,mean
df.max()
分析師好的習慣迅耘,拿到數(shù)據(jù):
df.info()→df.head()→df.describe()
七贱枣、累加函數(shù)cumsum()
這個函數(shù)的功能是返回給定axis上的累計和
df['cumsum']=df.編號.cumsum()
八、分段函數(shù)cut()颤专,按照指分
df['cut']=pd.cut(df.編號,bins=4,labels=list('abcd'))
bins代表等分個數(shù)纽哥,labels表示別名,比如20-30歲少年
###不等分:
df['bin']=pd.cut(df.編號,bins=[0,500,1000,2000])
分為法分段函數(shù)pd.qcut()栖秕,按照排名分
數(shù)據(jù)聚合(與sql中的group by類似)
一春塌、groupby()
###max()最大值,還可以是avg等
df.groupby(by = '網(wǎng)站情況').max()
###指定某列:
df.groupby(by = '網(wǎng)站情況').編號.max()
###多個字段分組簇捍,結果是多重索引
df.groupby(by = ['網(wǎng)站情況','名稱']).編號.max()
###k[0]只壳,k[1]分別表示元組和數(shù)據(jù)框
for k in df.groupby(by = '網(wǎng)站情況'): print(k) 結果是一個元組,每個值是一個數(shù)和一個數(shù)據(jù)框
for k in df.groupby(by = '網(wǎng)站情況'): print(k[1])
###分組后最大值與最小值的差值
for k,v in df.groupby(by = '網(wǎng)站情況'):
????????print(max(v.編號)-min(v.編號))
多表關聯(lián)
三種關聯(lián)函數(shù)
一暑塑、concat(類似于堆疊吼句,類似于sql 的union)
應用場景:表1:1月份銷售明細;表2:2月份銷售明細事格,則可以進行拼接
參數(shù):objs是[a惕艳,b]
axis=1 是左右拼接搞隐,默認為0是上下拼接
兩張表放在一起,字段合并
二远搪、join(針對的是索引)
如果是針對的某一列關聯(lián)劣纲,用merge
多表索引不一致,關聯(lián)后數(shù)據(jù)錯誤谁鳍,一般用在時間索引等
三癞季、merge(根據(jù)介質,也就是某一列)
1倘潜、直接數(shù)據(jù)框使用merge
df.merge()
right是右邊绷柒,on參數(shù)是當兩張表的關鍵字段名一樣時,當兩張表關聯(lián)字段名不一樣時使用right_on=窍荧,left_on
2、pd.merge()
這里多出來一個left參數(shù)
多重索引
一恨憎、groupby的多重索引切片
關鍵點:serise級別可以直接輸入索引標簽進行切片查詢
###第一步得出來是數(shù)據(jù)框形式
df.groupby(by = ['網(wǎng)站情況','編號']).mean()
###第二步等出來結果是Serise
df.groupby(by = ['網(wǎng)站情況','編號']).mean().rank
###第三步對Serise形式數(shù)據(jù)進行篩選
df.groupby(by = ['網(wǎng)站情況','編號']).mean().rank ['未嵌碼']
注意:數(shù)據(jù)框下多重索引需要使用loc
df.groupby(by = ['網(wǎng)站情況','編號']).mean().loc['網(wǎng)站打不開']
二蕊退、多重索引的變化
1、set_index():列名變成索引
df.sort_values(by=['網(wǎng)站情況','編號']).set_index(['網(wǎng)站情況','編號'])
2憔恳、reset_index()索引變成列
df.groupby(by = ['網(wǎng)站情況','編號']).mean().reset_index(['網(wǎng)站情況','編號'])
文本函數(shù)
str()函數(shù)
針對的是這個表格進行操作(也就是字符串)
df.網(wǎng)站情況.str[-1,1]
replace()函數(shù)也是針對表格的具體值替換
當需要針對值里的某個字符替換時瓤荔,則還需要套用一個str()函數(shù)
df.網(wǎng)站情況.str.replace('未','沒有')
去重函數(shù)
1、空值填充fillna
某個值為空值
df.loc[df.名稱 == '扶貧辦','名稱'] = np.NaN
###指定某一列的空值填充
df.名稱=df.名稱.fillna('abc')
###整個數(shù)據(jù)框的空值填充
df = df.fillna('abc')
2钥组、空值行刪除
df.dropna()
3输硝、刪除重復元素
###判斷是否有重復值
df.duplicated()
###索引每一列是否有重復值
df[df.duplicated()]
###去除重復后的數(shù)據(jù)框
df[~df.duplicated()]
drop_duplicates() 直接返回數(shù)據(jù)
apply函數(shù)(自定義函數(shù)應用到列或者行)
1、對某個列
輸入:df.編碼的每一行
輸出:按照匿名函數(shù)lambda x:str(x)+'k'輸出
df.編號.apply(lambda x:str(x)+'k')
等價于
def func(x):?
? ? ? ?return str(x)+'k'?
df.編號.apply(func)??
2程梦、對整個數(shù)據(jù)框:
axis=0表示應用函數(shù)多每個列
axis=1表示應用函數(shù)多每個行
3点把、apply應用在聚合函數(shù)
不同網(wǎng)站情況編號排名前3的
def func(x):
????r = x.sort_values('編號',ascending=False) ????return r[:3]
df.groupby('網(wǎng)站情況').apply(func)
自定義取前幾個:
def func(x,n):
? ? r = x.sort_values('編號',ascending=False)? ??
? ? return r[:n]
df.groupby('網(wǎng)站情況').apply(func,n=3)
4、agg函數(shù)
df.groupby('網(wǎng)站情況').agg('mean')
等價于
df.groupby('網(wǎng)站情況').mean()
agg可以進行多個函數(shù)計算:
df.groupby('網(wǎng)站情況').agg(['mean','sum'])
數(shù)據(jù)透視表函數(shù)pivot_table
df.pivot_table(index= '網(wǎng)站情況',columns='名稱',values='編號')
1屿附、某個字段計算某個函數(shù)郎逃,使用字典:介質對
df.pivot_table(index= '網(wǎng)站情況',columns='名稱',values=['編號','序號'],aggfunc={'編號':np.mean,'序號':len})