python高级数据分析_Python数据分析-pandas高级操作

创建一个df,两列分别是姓名和薪资,然后给其名字起对应的英文名

dic ={'name':['jay','tom','jay'],'salary':[1000,2000,1000]

}

df= DataFrame(data=dic)

df

#给jay和tom起两个中文名字

dic = {#映射关系表:表明了映射关系

'jay':'张三',

'tom':'李四'

}

df['c_name'] = df['name'].map(dic)

df

运算工具

超过300部分的钱缴纳50%的税,计算每个人的税后薪资

map是Series的方法,只能被Series调用

def after_sal(s):return s - (s-300)*0.5df['after_sal'] = df['salary'].map(after_sal)

df

Series的方法apply也可以像map一样充当运算工具

apply充当运算工具效率要远远高于map

def after_sal(s):

return s - (s-300)*0.5

df['after_sal'] = df['salary'].apply(after_sal)

df

排序实现的随机抽样

take()

np.random.permutation()

df = DataFrame(data=np.random.randint(0,100,size=(100,3)),columns=['A','B','C'])

np.random.permutation(3) #返回0-2之间的乱序序列

array([2, 0, 1])

#1.对原始数据进行打乱

#打乱:是对索引打乱

#task的axis和drop系列的函数

df.take(indices=np.random.permutation(3),axis=1)

#对行列索引进行打乱且进行随机抽样

df.take(indices=np.random.permutation(3),axis=1).take(indices=np.random.permutation(100),axis=0)[0:20]

数据的分类处理

数据分类处理的核心:

groupby()函数

groups属性查看分组情况

df = DataFrame({'item':['Apple','Banana','Orange','Banana','Orange','Apple'],'price':[4,3,3,2.5,4,2],'color':['red','yellow','yellow','green','green','green'],'weight':[12,20,50,30,20,44]})

df

#提供一个分组条件,想要对水果的种类分组

df.groupby(by='item')

#查看分组结果

df.groupby(by='item').groups

{'Apple': Int64Index([0, 5], dtype='int64'),

'Banana': Int64Index([1, 3], dtype='int64'),

'Orange': Int64Index([2, 4], dtype='int64')}

#分组聚合:计算每一种水果的平均价格

df.groupby(by='item').mean()['price']#不推荐

item

Apple 3.00

Banana 2.75

Orange 3.50

Name: price, dtype: float64

#推荐

df.groupby(by='item')['price'].mean()

item

Apple 3.00

Banana 2.75

Orange 3.50

Name: price, dtype: float64

#将每一种水果的平均价格计算出来然后汇总到源数据中

mean_price_s = df.groupby(by='item')['price'].mean()

mean_price_s

item

Apple 3.00

Banana 2.75

Orange 3.50

Name: price, dtype: float6

dic = mean_price_s.to_dict()

dic

#求出每一种颜色水果的平均重量,将其汇总到源数据中

mean_weight_s = df.groupby(by='color')['weight'].mean()

mean_weight_s

color

green 31.333333

red 12.000000

yellow 35.000000

Name: weight, dtype: float64

df['color_mean_weight'] = df['color'].map(mean_weight_s.to_dict())

df

高级数据聚合

使用groupby分组后,也可以使用transform和apply提供自定义函数实现更多的运算

df.groupby('item')['price'].sum() <==> df.groupby('item')['price'].apply(sum)

transform和apply都会进行运算,在transform或者apply中传入函数即可

transform和apply也可以传入一个lambda表达式

def my_mean(s):

sum= 0

for i ins:

sum+=ireturn sum / len(s)

df.groupby(by='item')['price'].transform(my_mean)

0 3.00

1 2.75

2 3.50

3 2.75

4 3.50

5 3.00

Name: price, dtype: float64

df.groupby(by='item')['price'].apply(my_mean)

item

Apple 3.00

Banana 2.75

Orange 3.50

Name: price, dtype: float64

apply和transform的区别:

transform返回的结果是经过映射后的结果

apply返回的是没有经过映射的结果

数据加载

读取type-.txt文件数据

df = pd.read_csv('./data/type-.txt')          #文本第一行成为了列索引  这不是我们想要的

df

df = pd.read_csv('./data/type-.txt',header=None)

df

df = pd.read_csv('./data/type-.txt',header=None,sep='-')

df

df.shape

(2, 1)

读取数据库中的数据

#连接数据库,获取连接对象

import sqlite3assqlite3

conn= sqlite3.connect('./data/weather_2012.sqlite')

#读取库表中的数据值

sql_df=pd.read_sql('select * from weather_2012',conn)

sql_df

#将一个df中的数据值写入存储到db

df.to_sql('dddfff',conn)

pd.read_sql('select * from dddfff',conn)

透视表

透视表是一种可以对数据动态排布并且分类汇总的表格格式。或许大多数人都在Excel使用过数据透视表,也体会到它的强大功能,而在pandas中它被称作pivot_table。

透视表的优点:

灵活性高,可以随意定制你的分析计算要求

脉络清晰易于理解数据

操作性强,报表神器

df = pd.read_csv('./data/透视表-篮球赛.csv')

df

pivot_table有四个最重要的参数index、values、columns、aggfunc

index参数:分类汇总的分类条件

每个pivot_table必须拥有一个index。如果想查看哈登对阵每个队伍的得分则需要对每一个队进行分类并计算其各类得分的平均值:

想看看哈登对阵同一对手在不同主客场下的数据,分类条件为对手和主客场

df.pivot_table(index=['对手','主客场'])

values参数:需要对计算的数据进行筛选

如果我们只需要哈登在主客场和不同胜负情况下的得分、篮板与助攻三项数据:

df.pivot_table(index=['主客场','胜负'],values=['得分','篮板','助攻'])

Aggfunc参数:设置我们对数据聚合时进行的函数操作

当我们未设置aggfunc时,它默认aggfunc='mean'计算均值。

还想获得james harden在主客场和不同胜负情况下的总得分、总篮板、总助攻时:

df.pivot_table(index=['主客场','胜负'],values=['得分','篮板','助攻'],aggfunc='sum')

Columns:可以设置列层次字段

对values字段进行分类

#获取所有队主客场的总得分

df.pivot_table(index='主客场',values='得分',aggfunc='sum')

#查看主客场下的总得分的组成元素是谁

df.pivot_table(index='主客场',values='得分',aggfunc='sum',columns='对手',fill_value=0)

交叉表

是一种用于计算分组的特殊透视图,对数据进行汇总

pd.crosstab(index,colums)

index:分组数据,交叉表的行索引

columns:交叉表的列索引

import pandas aspdfrompandas import DataFrame

df= DataFrame({'sex':['man','man','women','women','man','women','man','women','women'],'age':[15,23,25,17,35,57,24,31,22],'smoke':[True,False,False,True,True,False,False,True,False],'height':[168,179,181,166,173,178,188,190,160]})

df

# 求出各个性别抽烟的人数

pd.crosstab(index=df.smoke,columns=df.sex)

#求出各个年龄段抽烟人情况

pd.crosstab(df.age,df.smoke)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值