Python数据分析第二篇--数据计算

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python数据分析第二篇--数据计算相关的知识,希望对你有一定的参考价值。

分组计算:

  Group By : split – apply – combine

    split: 很具某些条件对数据进行分组

    apply:对每一个group独立的应用函数

    combine:将结果数据组合到某种数据结构中

pokemon = pd.read_csv(‘Pokemon.csv‘)    #读文件
pokemon[‘Type 1‘].value_counts()    

# 分组 groupby
grouped1 = pokemon.groupby(‘Type 1‘)

计算:

1.求平均 .mean()

grouped1.mean()

技术分享

2.单个求平均 

grouped1[‘HP‘].mean()

技术分享

3.求和

grouped1.sum()

4.求中位数

grouped1.median()

 

分组:方法二:多个

grouped2 = pokemon.groupby([‘Type 1‘, ‘Type 2‘])

计算中,应用多个函数

grouped2.aggregate(np.mean)

技术分享

grouped2.aggregate([np.mean,np.median])

技术分享

针对不同的列:

grouped2.aggregate([np.mean,np.median,np.sum])[‘HP‘]

技术分享

不同的列:用不同函数

grouped2.agg({‘HP‘:np.mean,‘Attack‘:np.median})

grouped2.agg({‘HP‘:np.mean,‘Attack‘:[np.median,np.sum]})

技术分享

 

查看大小:

grouped2.size()

技术分享

 

查看具体分组:

grouped2.groups

技术分享

 

获得某一组:

grouped2.get_group((‘Normal‘, ‘Ground‘))    #填写元组

技术分享  

计算每个组大小:

for name,group in grouped2:
    print(name)
    print(group.shape)

技术分享

 

对数据进行标准化:(防止数值过大)

  数值型: 该列,每一个减去平均数 除以 该列标准差

zscore = lambda s : ( s - s.mean() ) / s.std()

grouped1.transform(zscore)

技术分享

 

过滤:

  某些组别样本数过大!,需要剔除

# 假设要求每个组别样本小于10

cond1 = lambda s : len(s)<10

grouped2.filter(cond1).shape

技术分享

 

前情:设置索引:

pok1 = pokemon.set_index([‘Type 1‘, ‘Type 2‘])

技术分享

 

按索引进行分组:

pok1.groupby(level=[0])
pok1.groupby(level=[0,1])

pok1.groupby(level=[‘Type 1‘, ‘Type 2‘])

技术分享

 

多表操作:

技术分享
df1 = DataFrame({
        A:[A0,A1,A2,A3],
        B:[B0,B1,B2,B3],
        C:[C0,C1,C2,C3],
        D:[D0,D1,D2,D3],
        },
        index=[0,1,2,3])

df2 = DataFrame({
        A:[A4,A5,A6,A7],
        B:[B4,B5,B6,B7],
        C:[C4,C5,C6,C7],
        D:[D4,D5,D6,D7],
        },
        index=[4,5,6,7])


df3 = DataFrame({
        A:[A8,A9,A10,A11],
        B:[B8,B9,B10,B11],
        C:[C8,C9,C10,C11],
        D:[D9,D9,D10,D11],
        },
        index=[8,9,10,11])
View Code

数据表操作:组合

pd.concat([df1,df2])

技术分享

pd.concat([df1,df2],axis=1)  # axis  =1 设置轴根据索引组合   =0按列名

技术分享

类似方法

df1.append(df2)  # append只能填一个参数!

 

主角,主键讲解:

技术分享
left = DataFrame({key1: [K0,K0,K1,K2],
        key2: [K0,K1,K0,K1],
        A: [A0,A1,A2,A3],
        B: [B0,B1,B2,B3],
        })

right = DataFrame({key1: [K0,K1,K1,K2],
        key2: [K0,K0,K0,K0],
        C: [C0,C1,C2,C3],
        D: [D0,D1,D2,D3],
        })
View Code
# how 组合方式  	默认inner     outer = 相等连接
# on = 左右两边 用什么key连接

# 根据key1 设置join组合
pd.merge(left,right,on=‘key1‘,how=‘inner‘)

技术分享

pd.merge(left,right,on=[‘key1‘,‘key2‘])

技术分享

pd.merge(left,right,on=[‘key1‘,‘key2‘],how=‘left‘)

技术分享

 

重命名:

right1 = right.rename(columns={‘key1‘:‘new_key1‘,‘key2‘:‘new_key2‘})

 

主键名字不一样的组合:

pd.merge(left,right1,left_on=[‘key1‘,‘key2‘],right_on=[‘new_key1‘,‘new_key2‘],how=‘left‘)

技术分享

 

索引位与列的组合:

技术分享
left_Index = left.set_index([key1,key2])
前提设置
# left_index,right_index默认False, 改为True 表示左边数据集使用索引位

pd.merge(left_Index,right1,left_index=True,right_on=[‘new_key1‘,‘new_key2‘],how=‘left‘)    

技术分享

 

csv文件中,没有列名.需要自己定义!

user_info = pd.read_csv(‘user_info_train.txt‘,header = None , names = [‘id‘,‘sex‘,‘job‘,‘education‘,‘marriage‘,‘hukou‘])    # 注意names

 

查看唯一值:

id = user_info[‘id‘]
id.unique()
len(id.unique())

技术分享

 

行变列显示:

a = grouped3[‘amountOfTrans‘].sum()
a.unstack()

# stack() 与unstack()  逆操作!!
# a.stack()   a.unstack()

技术分享技术分享

 

rename:

a.rename(columns = {a.columns[0]:‘shouru‘,a.columns[1]:‘zhichu‘},inplace=True)

直接运算:

a[‘diff‘] = a[‘shouru‘] - a[‘zhichu‘]

技术分享

 

透视表:

pd.pivot_table(data = pokemon , index= ‘Type 1‘, columns= ‘Type 2‘ , values=[‘HP‘ ,‘Total‘],aggfunc=[np.sum])

pd.pivot_table(data = pokemon , index= ‘Type 1‘, columns= ‘Type 2‘ , values=[‘HP‘ ,‘Total‘],aggfunc=[np.sum,np.mean])

 

交互表:

计算频率:

pd.crosstab(index = pokemon[‘Type 1‘],columns= pokemon[‘Type 2‘] )

pd.crosstab(index = pokemon[‘Type 1‘],columns= pokemon[‘Type 2‘] ,margins=True)    # margins 显示总频率

技术分享

 

dummy variables

没有意义的类别,不需要比较的数据

#在Type1的类别中,有且唯有一个 1
pd.get_dummies(data=pokemon,columns=[‘Type 1‘])

pd.get_dummies(data=pokemon,columns=[‘Type 1‘,‘Type 2‘])

技术分享

 

以上是关于Python数据分析第二篇--数据计算的主要内容,如果未能解决你的问题,请参考以下文章

python 基础第二篇

Python开发第二十二篇:Web框架之Django进阶

6.4 tensorflow2实现FNN推荐系统——Python实战(第二篇)

第二篇:流程控制数据类型字符编码文件处理

Python之路第二篇计算机组成

python笔记 [第二篇]:基础数据类型