一、數(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)