数据分析05 /pandas的高级操作

1. 替换操作

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

  • 创建df表格数据:

    import numpy as np
    import pandas as pd
    from pandas import DataFrame,Series df = DataFrame(data=np.random.randint(0,100,size=(8,7)))
  • 普通替换: 替换所有符合要求的元素:to_replace=15,value='e'

    df.replace(to_replace=0,value='zero')
  • 按列指定单值替换: to_replace={列标签:替换值} value='value'

    df.replace(to_replace={0:'aaa',22:222666})
  • 指定行替换

    df.iloc[2] = [0,0,0,0,0,0,0]
    df
  • 指定列替换

    df.replace(to_replace={4:0},value=666)
    
    # 将第4列中的0替换成666

2. 映射操作

  • 概念:map是Series的一个方法,创建一个映射关系列表,把values元素和一个特定的标签或者字符串绑定(给一个元素值提供不同的表现形式)

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

    1.创建一个df表格:

    dic = {
    'name':['张三','李四','王老五'],
    'salary':[22222,7777,11111]
    }
    df = DataFrame(data=dic)
    df

    2.创建映射表:

    # 映射关系表
    dic = {
    '张三':'tom',
    '李四':'jay',
    '王老五':'jerry'
    }
    df['e_name'] = df['name'].map(dic)
    df

3. 运算工具

  • map:map括号中放的是函数就是充当运算工具来使用

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

    def after_sal(s):   # 返回税后薪资,参数s就是税前薪资
    return s - (s-3000)*0.5 df['after_sal'] = df['salary'].map(after_sal)
    df
  • apply:apply是df的一个方法/运算工具,可以将df中行或者列数据进行某种形式的运算操作。

    def func(s):
    s = s.sum()
    print(s)
    df.apply(func,axis=0) # 结果:
    张三李四王老五
    41110
    tomjayjerry
    25055.0

4. 映射索引 / 更改之前索引

  • 使用rename()函数替换行索引

    参数介绍:index 替换行索引,columns 替换列索引

    1.创建df4表格

    df4 = DataFrame({'color':['white','gray','purple','blue','green'],'value':np.random.randint(10,size = 5)})
    df4

    2.映射行/列索引

    # 映射关系表:映射行索引
    new_index = {0:'first',1:'two',2:'three',3:'four',4:'five'}
    # 映射关系表:映射列索引
    new_col={'color':'cc','value':'vv'} df4.rename(new_index,columns=new_col)

5. 排序实现的随机抽样/打乱表格数据

  • np.random.permutation():指定数内随机排序

    np.random.permutation(10)
    
    # 结果:
    array([8, 2, 6, 7, 3, 9, 1, 5, 0, 4])
  • take():将df数据的行/列进行打乱操作

    df = DataFrame(data=np.random.randint(0,100,size=(100,3)),columns=['A','B',"C"])
    df.take(np.random.permutation(3),axis=1).take(np.random.permutation(100),axis=0)[:50]

6. 数据的分类处理 / 分组

  • 数据分类处理的核心:groupby()函数,groups属性查看分组情况

    1.创建表格

    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

    示例1:计算每种水果的平均价格

    # 分组
    df.groupby(by='item')
    # 结果:<pandas.core.groupby.DataFrameGroupBy object at 0x000001B6E3D4A0B8> # 查看分组情况
    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'] # 不推荐
    df.groupby(by='item')['price'].mean() # 推荐

    示例2:计算每种颜色水果的平均重量

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

    示例3:将每种水果的平均价格数据汇总到原数据中,通过映射实现

    # 求每种水果的平均价格
    mean_price_series = df.groupby(by='item')['price'].mean() # 将mean_price_series转换成字典,mean_price_series是Series类型
    dic = mean_price_series.to_dict() # 建立item和平均价格的映射关系,并在表中创建mean_price列
    df['mean_price'] = df['item'].map(dic)

7. 高级数据聚合

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

    示例:

    df.groupby('item')['price'].sum() <==> df.groupby('item')['price'].apply(sum)
  • transform和apply都会进行运算,在transform或者apply中传入函数即可,transform和apply也可以传入一个lambda表达式

    transform应用示例1:

    # 错误示例:
    def abc(s):
    return s
    df.groupby(by='item')['price'].abc() # abc不是Series对象的方法 # 正确使用:
    df.groupby(by='item')['price'].transform(abc) #通过transform可以实现

    transform应用示例2:自定义一个求均值的函数,作用到分组结果中

    def my_mean(s):
    sum = 0
    for i in s:
    sum+=i
    return sum/s.size
    df.groupby(by='item')['price'].transform(my_mean)

    apply应用实例:自定义一个求均值的函数,为了防止混淆,可以忽略此方法

    def my_mean(s):
    sum = 0
    for i in s:
    sum+=i
    return sum/s.size
    df.groupby(by='item')['price'].apply(my_mean)

8. 数据加载

  • 读取type-.txt文件数据

    import pandas as pd
    from pandas import DataFrame,Series
    data=pd.read_csv('./data/type-.txt') # data/type-.txt文件数据:
    """
    你好-我好-他也好
    也许-大概-有可能
    然而-未必-不见得
    """

    将文件中每一个词作为元素存放在DataFrame中

    data=pd.read_csv('./data/type-.txt',sep='-',header=None)
    
    # sep:通过sep指定的符号切割
    # header=None,不以数据的第一行作为列的索引
  • 读取数据库中的数据

    # 连接数据库,获取连接对象
    import sqlite3 as sqlite3
    conn=sqlite3.connect('./data/weather_2012.sqlite') # 读取库表中的数据值
    sql_df=pd.read_sql('select * from weather_2012',conn)
    sql_df # 将一个df中的数据值写入存储到db
    df.to_sql('fruit',conn) # 此方法不适用mysql数据库的写入

9. 透视表

  • 透视表概述:

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

  • 透视表的优点:

    • 灵活性高,可以随意定制你的分析计算要求
    • 脉络清晰易于理解数据
    • 操作性强,报表神器
  • 透视表的参数:

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

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

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

    Aggfunc参数:设置我们对数据聚合时进行的函数操作,当我们未设置aggfunc参数:默认aggfunc='mean'计算均值

    Columns参数:可以设置列层次字段,对values字段进行分类

  • 示例:分析NBA球星的比赛数据

    将数据读取出来

    import pandas as pd
    import numpy as np
    df = pd.read_csv('./data/basketball_game.csv')
    df.head()

    1.查看Harden对阵过球队的比赛数据

    df.pivot_table(index='对手')  # 默认分类汇总使用的聚合函数是mean

    2.对阵同一对手在不同主客场下的数据,分类条件为对手和主客场

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

    3.只需要Harden在主客场和不同胜负情况下的得分、篮板与助攻三项数据

    df.pivot_table(index=['主客场','胜负'],values=['得分','篮板','助攻'])
    
    # values参数的使用

    4.获取Harden在主客场和不同胜负情况下的总得分、总篮板、总助攻数

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

    5.获取Harden在主客场和不同胜负情况下的平均得分、总篮板、最小助攻数

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

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

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

    7.获取每个队主客场的总得分(在总得分的基础上又进行了对手的分类)

    df.pivot_table(index='主客场',values='得分',aggfunc='sum',columns='对手').fillna(value=0)
    
    # Columns参数的使用

10. 交叉表

  • 交叉表概述:是一种用于计算分组的特殊透视图,对数据进行汇总,pd.crosstab(index,colums)

  • 交叉表pd.crosstab(index,colums)的参数:

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

    columns参数:交叉表的列索引

  • 交叉表应用示例:

    1.创建表

    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

    2.求出不同性别抽烟的人数

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

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

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

数据分析05 /pandas的高级操作的更多相关文章

  1. Pandas的高级操作

    pandas数据处理 1. 删除重复元素 使用duplicated()函数检测重复的行,返回元素为布尔类型的Series对象,每个元素对应一行,如果该行不是第一次出现,则元素为True keep参数: ...

  2. 利用Python进行数据分析(15) pandas基础: 字符串操作

      字符串对象方法 split()方法拆分字符串: strip()方法去掉空白符和换行符: split()结合strip()使用: "+"符号可以将多个字符串连接起来: join( ...

  3. Python数据分析之pandas学习(基础操作)

    一.pandas数据结构介绍 在pandas中有两类非常重要的数据结构,即序列Series和数据框DataFrame.Series类似于numpy中的一维数组,除了通吃一维数组可用的函数或方法,而且其 ...

  4. 数据分析06 /pandas高级操作相关案例:人口案例分析、2012美国大选献金项目数据分析

    数据分析06 /pandas高级操作相关案例:人口案例分析.2012美国大选献金项目数据分析 目录 数据分析06 /pandas高级操作相关案例:人口案例分析.2012美国大选献金项目数据分析 1. ...

  5. pandas高级操作

    pandas高级操作 import numpy as np import pandas as pd from pandas import DataFrame,Series 替换操作 替换操作可以同步作 ...

  6. 数据分析之Pandas操作

    Pandas pandas需要导入 import pandas as pd from pandas import Series,DataFrame import numpy as np 1 Serie ...

  7. 数据分析之Pandas

    一.Pandas介绍 1.介绍 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的.Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具. ...

  8. 一句Python,一句R︱pandas模块——高级版data.frame

    先学了R,最近刚刚上手python,所以想着将python和R结合起来互相对比来更好理解python.最好就是一句python,对应写一句R. pandas可谓如雷贯耳,数据处理神器. 以下符号: = ...

  9. 数据分析工具Pandas

        参考学习资料:http://pandas.pydata.org 1.什么是Pandas? Pandas的名称来自于面板数据(panel data)和Python数据分析(data analys ...

随机推荐

  1. cnpm的安装(超级详细版)

    1. 安装node 打开黑窗口   安装node 网上教程很多,我就不加上了 2.node -v  查看node是否已安装 3.安装淘宝镜像 npm install -g cnpm -registry ...

  2. Flume-1.4.0和Hbase-0.96.0整合

    在使用Flume的时候,请确保你电脑里面已经搭建好Hadoop.Hbase.Zookeeper以及Flume.本文将以最新版的Hadoop-2.2.0.Hbase-0.96.0.Zookeeper-3 ...

  3. sourcetree 安装破解注册方法

    1.下载sourcetree安装包 2.点击安装到下图步骤 3.在网盘中下载accounts.json  文件,( 链接:https://pan.baidu.com/s/1tJd_xCh-B-oOwd ...

  4. git 提交流程

    Git提交流程: 1. Menu remote > (拉取)fetch 2. 重新扫描(rescan) 3. 缓存改动(stage change) 4. 写注释后提交(commit) 5. Me ...

  5. 腾讯云Redis混合存储版重磅推出,万字长文助你破解缓存难题!

    导语 | 缓存+存储的系统架构是目前常见的系统架构,缓存层负责加速访问,存储层负责存储数据.这样的架构需要业务层或者是中间件去实现缓存和存储的双写.冷热数据的交换,同时还面临着缓存失效.缓存刷脏.数据 ...

  6. Linux性能优化思路

    性能测试的核心,就是找出性能瓶颈并进行性能优化,解决"慢"的问题,最终满足客户业务需求. [性能需求来源及性能问题现象] 性能需求的来源,主要分为以下几类: 项目组提出性能需求: ...

  7. jmeter关联的五种方式

    [脚本准备] 这里,我们用dummy取样器来模拟服务器的返回,通过关联获取name的值,然后接口取这个name的值,这就我们就简单模拟了请求间的依赖关系 在取样器中添加dummy取样器 搜索的关键字是 ...

  8. Python分支结构与流程控制

    Python分支结构与流程控制 分支结构 if 语句 分支结构在任何编程语言中都是至关重要的一环,它最主要的目的是让计算机拥有像人一样的思想,能在不同的情况下做出不同的应对方案,所以if语句不管是在什 ...

  9. MongoDB快速入门教程 (3.2)

    3.2.索引 索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,建立索引,通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条 ...

  10. 基于AOP和ThreadLocal实现日志记录

    基于AOP和ThreadLocal实现的一个日志记录的例子 主要功能实现 : 在API每次被请求时,可以在整个方法调用链路中记录一条唯一的API请求日志,可以记录请求中绝大部分关键内容.并且可以自定义 ...