数据分析:Pandas基础2

替换操作

        替换操作可以同步作用于Series和DataFrame中

  • 单值替换:普通替换:替换所有符合要求的元素:to_replace=15,value='e'
                      按列指定单值替换:to_replace={列标签:替换值},value='value'
  • 多值替换:列表替换:to_replace=[],value=[]
                      字典替换:to_replace={to_replace:value,to_replace:value}
df=DataFrame(data=np.random.randint(0,100,size=(5,6)))
df.replace(to_replace='1',value='wtf')
df.replace(to_replace=1,value='wtf')        #要注意数据类型

df.replace(to_replace={10:'what’s up'})     #字典形式替换(推荐)

df.replace(to_replace={4:5},value='wtf')    #替换指定列的5为wtf

 

 

 映射操作

  • 创建一个映射关系列表,把values元素和一个特定的标签或者字符串绑定(给一个元素提供不同的表现形式)
  • 创建一个df,两列分别是姓名和薪资,然后给其名字起对应的英文名
dic={'name':['张三','李四','张三'],'salary':[15000,20000,15000]}
df=DataFrame(data=dic)

#映射关系表
dicc={'张三':'Tom','李四':'jack'}

df['e_name']=df['name'].map(dicc)    

  • map是属于Series的函数,只能通过Series来调用
  • map还可以充当运算工具

         案例:超过3000的部分需要交纳50%的税,计算每个人的税后薪资。

#制定一个运算法则
def ssalary(s):
    return s-(s-3000)*0.5


df['salary'].map(ssalary)    #可以将df['salary']这个Series中的每一个元素作为参数传递给s

随机抽样

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

#将原始数据打乱
df.take([2,0,1],axis=1)    #只能用隐式索引,0是行,1是列

#生成随机的乱序序列
np.random.permutation(3)    #生成0到2的乱序序列,(0,n-1)

#行列都打乱,取前50
df.take(np.random.permutation(3),axis=1).take(np.random.permutation(100),axis=0)[0:50]

分类处理

        数据分类核心: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.groupby(by='item')    #<pandas.core.groupby.generic.DataFrameGroupBy object at 0x000002986A8BF580>
#查看属性
df.groupby(by='item').groups    #{'Apple': [0, 5], 'Banana': [1, 3], 'Orange': [2], 'orange': [4]}

         分组聚合

#计算出每一种水果的平均价值
df.groupby(by='item').mean()    #这样是默认对所有数值型数据进行mean操作
df.groupby(by='item')['price'].mean()    #这样是只对价格进行聚合

#及算每种颜色对应水果的平均重量
df.groupby(by='color')['weight'].mean()

#将计算出的平均重量汇总到数据中
dic=df.groupby(by='color')['weight'].mean().to_dict() #生成一个用来映射到每个颜色的重量的dic
df['mean_w']=df['color'].map(dic)

        高级数据聚合

  • 使用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):            #这是传入的s是一个list
    m_sum=0
    for i in s:
        m_sum+=i
    return m_sum /len(s)

df.groupby(by='item')['price'].transform(my_mean)    #左图,可以直接来汇总到源数据
#同
df.groupby(by='item')['price'].apply(my_mean)        #右图,这个还要在映射一次

透视表、交叉表

  • 透视表是一种可以对数据动态排布并且分类汇总的表格格式。或许大多数人都在Excel使用过数据透视表,也体会到它的强大功能,而在pandas中它被称作pivot_table。
  • 透视表优点:灵活性高,可以随意定制你的分析计算要求
                          脉络清晰易于理解数据
                          操作性强,报表神器

看视频吧

10小时学会Python数据分析、挖掘、清洗、可视化从入门到项目实战(完整版)学会可做项目_哔哩哔哩_bilibili

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Arvee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值