数据分析师-pandas统计基础

一、数值计算和统计

1.基本参数axis轴和skipna跳过空值

df.mean() #.mean()默认列计算均值

df.mean(axis=1) #.mean(axis=1)为行计算均值

df.mean(axis=1,skipna=False)#按照行算平均值,直接过滤掉空值和非数值结构;如果想不忽略空值计算,需要skipna参数=False --但是仍然忽略非数值结构

2.计算

df.quantile(q=n) #n分位数  df.std()标准差  df.skew() #样本的偏度  df.kurt()#样本的峰度

3.累计求和/累计求积/累计最大值/累计最小值

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

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

5.计数:.value_counts()每个值重复的频率,得到新的Series

s.value_counts(sort=False) #sort参数:对频率排序,默认True

6.成员资格:.isin()类似in 语句,就算只有一个元素也要用[]

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

二、文本数据

1.通过str访问,且自动忽略丢失/NAN值;不仅适用于值,还适用于列和index

s.str.count('b') #str调用文本数据的方法

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)分列后再分多个行:参数expand 默认False不分多行, 参数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') 参数:当合并的列明重复时,通过它区分

注:虽然join默认以index为键,但是可以用on改变

四、连接与修补

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

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

(2)index参数:是否要根据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被重复,False没被重复,从上往下依次判断,所以第一个出现肯定不会重复)

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

#以上df同样适用

3.替换.replace(通用):注:传入字典,key为old,values为new

六、分组*****

1..groupby(axis=0默认按行(数据)分组=1按列分组;分组后的计算得到新的df;可以单个或多个[]分组)

例:df.groupby('A')返回DataFrameGroupBy,是中间数据

例:df.groupby('A').sum() 返回的是聚合后的数据

df.groupby(['A','B'])可以多行分组 ;df.groupby(['A'])['D'].mean()也可以分组后对某列求聚合函数

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.按照数值类型分组:***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.按照函数分组:df.groupby(len).sum() #按照index的字母长度分组

7.多函数计算:.agg(['',''或np.xx]): 

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

df.groupby('a')['b'].agg({'result1':np.mean,'result2:':np.sum})  #通过dict传入多函数,key为生成结果的columns

总结:

1.分组方式:groupby默认axis=0按行分组

按照数值类型分组,先df.dtypes判断类型,在以Series格式按列分组

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

七、分组转换拆分-应用-合并:transform、apply

1.数据分组转换transform

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

(2)方法二、transform会将一个函数应用到各个分组,然后将结果以index全部展现:df.groupby('key2').transform(np.mean)

2.一般化groupby方法:apply--自定义函数,分组后按照该函数运行

df.groupby('key1').apply(f_df1,2) #.apply(函数名,第二个参数)第一个参数默认为apply所执行的

八、数据透视表及交叉表

(1)#透视表 pivot_table(data-df数组,values要聚合的数值,index数透的index,columns透视表的列,aggfunc用于聚合的函数,默认为numpy.mean)

(2)交叉表crosstab 默认情况下,crosstab计算因子的频率表,比如用str的数据透视分析;

#pd.crosstab(Series1,Series2,normalize,values,aggfunc)只接收两个Series,将提供出现的频率表

#参数normalize:默认False将所有值除以值总和进行归一化,=true时显示频率百分比;

#参数values,aggfunc:S1和S2因子聚合后得出values的值并聚合成aggfunc的函数

#参数margins:=True时规格显示的结果并给出行列的总和all

九、数据读取:read_table、read_csv逗号分隔符数据、read_excel

1.读取普通分隔数据::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)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,670评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,928评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,926评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,238评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,112评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,138评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,545评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,232评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,496评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,596评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,369评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,226评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,600评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,906评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,185评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,516评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,721评论 2 335

推荐阅读更多精彩内容