數(shù)據(jù)分析師-pandas統(tǒng)計基礎

一、數(shù)值計算和統(tǒng)計

1.基本參數(shù)axis軸和skipna跳過空值

df.mean() #.mean()默認列計算均值

df.mean(axis=1) #.mean(axis=1)為行計算均值

df.mean(axis=1,skipna=False)#按照行算平均值,直接過濾掉空值和非數(shù)值結構;如果想不忽略空值計算,需要skipna參數(shù)=False --但是仍然忽略非數(shù)值結構

2.計算

df.quantile(q=n) #n分位數(shù)? df.std()標準差? df.skew() #樣本的偏度? df.kurt()#樣本的峰度

3.累計求和/累計求積/累計最大值/累計最小值

df['key1'].cumsum()/.cumprod()/.cummax()/.cummin()

4.保留唯一值:.unique()

5.計數(shù):.value_counts()每個值重復的頻率,得到新的Series

s.value_counts(sort=False) #sort參數(shù):對頻率排序,默認True

6.成員資格:.isin()類似in 語句,就算只有一個元素也要用[]

s.isin([5])? ?s.isin([5,13])

二、文本數(shù)據(jù)

1.通過str訪問,且自動忽略丟失/NAN值;不僅適用于值,還適用于列和index

s.str.count('b') #str調用文本數(shù)據(jù)的方法

df['key2'].str.upper() key2列全部大寫

df.columns = df.columns.str.upper() 列名全部大寫

2.字符串常用方法:s.str.lower()/s.str.upper()/s.str.len()/s.str.startswith()/s.str.endswith()

3.strip刪除空格 lstrip左刪除 rstrip右刪除:df.columns = df.columns.str.strip()

4.替換:replace(old,new,n替換第幾個)

5.分列:split rsplit只用于字符串,適用于Series 和DataFrame

(1)s.str.split(',')[0] #在分列基礎上再次選取[]代表選行

(2)s.str.split(',').str[0] #如果想選擇值里面的第一列,那就再加個str

s.str.split(',').str.get(1) #與上面的得結果一致,# 可以使用get或[]符號訪問拆分列表中的元素

(3)分列后再分多個行:參數(shù)expand 默認False不分多行, 參數(shù)n最后要拓展幾列

s.str.split(',',expand=True,n=1)

6.字符串索引:s.str[0] # 取第一個字符、s.str[:2] # 取前兩個字符

三、合并merge、join

1. pd.merge(left,right,on='鍵',how=’inner‘交集默認/outer/left/right,left_on左面的df以哪列作為鍵,left_index以左面df的index作為鍵 ,sort按照鍵排序)

例:pd.merge(df3,df4,on=['key1','key2'])#多個參考值連接

2. pd.join()-直接通過索引進行連接

(1)? .join中suffixes=('_x','_y') 參數(shù):當合并的列明重復時,通過它區(qū)分

注:雖然join默認以index為鍵,但是可以用on改變

四、連接與修補

1..concat([s1,s2],axis=0行=1列,join默認并集=inner交集,join_axes=['a']直指定顯示連接后顯示的軸)f

(1).concat([])以列表的形式

(2)index參數(shù):是否要根據(jù)index進行排序

(3)axis=0默認行+行,axis=1列+列生成df

(4)keys = ['one','two']當axis=0時,keys層次的名稱;axis=1時,keys為columns的名稱

2.df1.combine_first(df2)#通過index配對后把df2的值修補到df1的NaN上,如果df2的值多于df1會被更新上

#df1.update(df2):df2直接 全部覆蓋df1

五、去重及替換:.duplicated/.replace

1..duplicated返回布爾型(True被重復,F(xiàn)alse沒被重復,從上往下依次判斷,所以第一個出現(xiàn)肯定不會重復)

2.移除重復.drop_duplicates()inplace默認false,True代替原值

#以上df同樣適用

3.替換.replace(通用):注:傳入字典,key為old,values為new

六、分組*****

1..groupby(axis=0默認按行(數(shù)據(jù))分組=1按列分組;分組后的計算得到新的df;可以單個或多個[]分組)

例:df.groupby('A')返回DataFrameGroupBy,是中間數(shù)據(jù)

例:df.groupby('A').sum() 返回的是聚合后的數(shù)據(jù)

df.groupby(['A','B'])可以多行分組 ;df.groupby(['A'])['D'].mean()也可以分組后對某列求聚合函數(shù)

2.分組結果是可迭代的對象:

(1) list(df.groupby('X')) #返回[(組名1,df1),(組名2,df2)]#返回list

(2)list(df.groupby('X'))[0]

(3)提取分組 .get_group():df.groupby(['X']).get_group('A') #選擇分組后的組A

(4).groups:將分組后的group變成字典dict,key是組名,values是組的index;可以以字典索引方法查看groups里的元素

grouped = df.groupby(['X']), grouped.groups['A']

(5).size()查看分組后的長度? sz = grouped.size()

3.按照數(shù)值類型分組:***axis=1按照列進行分組

df.dtypes #返回Series,判斷各個值是什么類型

df.groupby(df.dtypes,axis=1).sum() #把Series傳入groupby,axis=1按照列進行分組

4.按照字典**:如果特地想把某幾列分一組,可以建立字典后分組

mapping = {'a':'one','b':'one','c':'two','d':'two','e':'three'}#ab列對應為one,cd列對應為twe,以字典分組

by_column = df.groupby(mapping,axis=1)

by_column.sum()

5.按照Series分組:axis=1按照列進行分組

6.按照函數(shù)分組:df.groupby(len).sum() #按照index的字母長度分組

7.多函數(shù)計算:.agg(['',''或np.xx]):?

df.groupby('a').agg(['mean',np.sum])

df.groupby('a')['b'].agg({'result1':np.mean,'result2:':np.sum})? #通過dict傳入多函數(shù),key為生成結果的columns

總結:

1.分組方式:groupby默認axis=0按行分組

按照數(shù)值類型分組,先df.dtypes判斷類型,在以Series格式按列分組

按字典分組,如果特地想把某幾列分一組,也是按列分組

七、分組轉換拆分-應用-合并:transform、apply

1.數(shù)據(jù)分組轉換transform

(1)方法一、先分組groupby后合并merge等價于transform

(2)方法二、transform會將一個函數(shù)應用到各個分組,然后將結果以index全部展現(xiàn):df.groupby('key2').transform(np.mean)

2.一般化groupby方法:apply--自定義函數(shù),分組后按照該函數(shù)運行

df.groupby('key1').apply(f_df1,2) #.apply(函數(shù)名,第二個參數(shù))第一個參數(shù)默認為apply所執(zhí)行的

八、數(shù)據(jù)透視表及交叉表

(1)#透視表 pivot_table(data-df數(shù)組,values要聚合的數(shù)值,index數(shù)透的index,columns透視表的列,aggfunc用于聚合的函數(shù),默認為numpy.mean)

(2)交叉表crosstab 默認情況下,crosstab計算因子的頻率表,比如用str的數(shù)據(jù)透視分析;

#pd.crosstab(Series1,Series2,normalize,values,aggfunc)只接收兩個Series,將提供出現(xiàn)的頻率表

#參數(shù)normalize:默認False將所有值除以值總和進行歸一化,=true時顯示頻率百分比;

#參數(shù)values,aggfunc:S1和S2因子聚合后得出values的值并聚合成aggfunc的函數(shù)

#參數(shù)margins:=True時規(guī)格顯示的結果并給出行列的總和all

九、數(shù)據(jù)讀取:read_table、read_csv逗號分隔符數(shù)據(jù)、read_excel

1.讀取普通分隔數(shù)據(jù)::read_table(dfile,delimiter,header=0第0行開始算并為列名,index_col某列開始為索引)可以讀取csv和txt

2.讀取csv文件***:read_csv(file,engine='python',encoding='utf-8)

3.讀取excel文件 read_excel(file,sheetname=[0,1]返回多個sheet/none返回全表--如果是int/string返回的是df,如果是list或None返回的是dict)

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容