数据分析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. @loj - 3046@「ZJOI2019」语言

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 九条可怜是一个喜欢规律的女孩子.按照规律,第二题应该是一道和数据 ...

  2. Spring源码系列(一)--详解介绍bean组件

    简介 spring-bean 组件是 IoC 的核心,我们可以通过BeanFactory来获取所需的对象,对象的实例化.属性装配和初始化都可以交给 spring 来管理. 针对 spring-bean ...

  3. HotCorner-让Windows 10拥有macOS的触发角特性!

    目录 简介 软件功能 下载 安装 卸载 使用 License 作者 FAQ 简介 macOS上有一个很方便的功能:"触发角".通过这个功能可以设置当鼠标移动到屏幕的四个角时的触发事 ...

  4. 通用!Python保存一个对象的方式

    参考资料: https://kite.com/python/answers/how-to-save-a-dictionary-to-a-file-in-python 通过如下的代码,可以将Python ...

  5. 将反向传播讲解的深入透彻的神一样的文章(numpy实现人工神经网络)

    为了完成机器学习课的项目,规定不许调tensorflow,pytorch这些包.可是要手工实现一个可训练的神经网络是非常困难的一件事,难点无他,就在于反向传播的实现.这不,我在网上发现了这篇文章.怎么 ...

  6. 阿里P7终于讲完了JDK+Spring+mybatis+Dubbo+SpringMvc+Netty源码

    前言 这里普及一下,每个公司都有职别定级系统,阿里也是,技术岗以 P 定级,一般校招 P5, 社招 P6 起.其实阅读源码也是有很多诀窍的,这里分享几点心得: 首先要会用.你要知道这个库是干什么的,掌 ...

  7. 小师妹学JVM之:JIT中的LogCompilation

    目录 简介 LogCompilation简介 LogCompilation的使用 解析LogCompilation文件 总结 简介 我们知道在JVM中为了加快编译速度,引入了JIT即时编译的功能.那么 ...

  8. Ray射线检测和Recources.Load

    记录射线检测常用的方法,以及Rocources.Load的常用用法 使用代码实现鼠标点击在鼠标点击处生成制定gameObject RayCastHit hit; void Update() { Ray ...

  9. git 远程分支和tag标签的操作

    git远程分支操作:1.创建远程分支git push --set-upstream origin develop:develop2在服务器创建远程分支devlop2,让本地的develop分支和dev ...

  10. junit基本介绍视频笔记1

    程序员每天工作的基本流程: 1.从svn检出代码: 2.运行单元测试,测试无误,进入下一步: 3.开始一天的代码编写工作: 4.代码提交到服务器之前进行单元测试: 5.单元测试通过提交到svn服务器. ...