数据分析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. SpringBoot整合分布式ZooKeeper和Dubbo

    ZooKeeper ZooKeeper是一个分布式的,开放远吗的分布式应用程序协调服务.它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护.域名服务.分布式同步.组服务等. 服务提供者 ...

  2. <VCC笔记> Assumption

    接下来是第二种注释语句类型Assumption.语法_(Assume E), 这个表达式是让VCC在接下来的额推理中,无视表达式E, 直接认可表达式E. 例: int x, y; _(assume x ...

  3. [转] 间接系统调用syscall(SYS_gettid)

    点击阅读原文 在linux下每一个进程都一个进程id,类型pid_t,可以由 getpid()获取. POSIX线程也有线程id,类型pthread_t,可以由 pthread_self()获取,线程 ...

  4. selenium获取图片验证码

    # encoding:utf-8 from PIL import Image from selenium import webdriver url = '网站地址' driver = webdrive ...

  5. WPF入门(1)

    开始对WPF动手,从0开始一步一步深入学习 1)参考文档:msdn.<WPF编程宝典:使用C#2012和NET 4.5 第4版> 2)开发工具:Microsoft Visual Studi ...

  6. WeChair项目Beta冲刺(7/10)

    团队项目进行情况 1.昨日进展    Beta冲刺第七天 昨日进展: 前后端并行开发,项目按照计划有条不絮进行 2.今日安排 前端:扫码占座功能和预约功能并行开发 后端:扫码占座后端逻辑开发,编码预约 ...

  7. vue入门的第一天: v-on使用

    v-on的使用 简介: v-on 是一个事件绑定机制,可以缩写为@ 如: <input type="button" value="按钮" v-on:cli ...

  8. Scala创建SparkStreaming获取Kafka数据代码过程

    正文 首先打开spark官网,找一个自己用版本我选的是1.6.3的,然后进入SparkStreaming   ,通过搜索这个位置找到Kafka, 点击过去会找到一段Scala的代码 import or ...

  9. 基于opencv的车牌提取项目

    初学图像处理,做了一个车牌提取项目,本博客仅仅是为了记录一下学习过程,该项目只具备初级功能,还有待改善 第一部分:车牌倾斜矫正 # 导入所需模块 import cv2 import math from ...

  10. 浅谈MySQL数据库

    目录 什么是数据库 定义 发展现状 数据库基本概念 数据库分类 关系数据库 非关系型数据库(NoSQL) 数据库启动与连接 启动服务端 连接数据库 用户信息查看 数据库的基本操作 表的基本操作 记录的 ...