zoukankan      html  css  js  c++  java
  • Pandas(二)描述统计与函数应用

     一、描述与统计

    1.查看基本统计值

    有时候我们获取到数据之后,想要查看下数据的简单统计指标(最大值、最小值、平均值、中位数等),比如想要查看年龄的最大值,如何实现呢?

    直接对 age 这一列调用 max方法即可。类似的,通过调用 min、mean、quantile、sum 方法可以实现最小值、平均值、中位数以及求和。可以看到,对一个 Series 调用 这几个方法之后,返回的都只是一个聚合结果。

    #函数
    np.max(user_info.年龄)

    #方法
    user_info.年龄.mean()

    如果想要获取更多的统计方法,可以参见官方链接:Descriptive statistics (http://pandas.pydata.org/pandas-docs/stable/basics.html#descriptive-statistics)

    虽然说常见的各种统计值都有对应的方法,如果我想要得到多个指标的话,就需要调用多次方法,是不是显得有点麻烦呢?Pandas 设计者自然也考虑到了这个问题,想要一次性获取多个统计指标,只需调用 describe 方法即可。

    # 只支持数值列
    user_info.describe()

    可以看到,直接调用 describe 方法后,会显示出数字类型的列的一些统计指标,如 总数、平均数、标准差、最小值、最大值、25%/50%/75% 分位数。

    如果想要查看非数字类型的列的统计指标,可以设置 include=["object"] 来获得。

    user_info.describe(include=["float64"])

    2.统计下某列中每个值出现的次数value_counts

    user_info['中青年'].value_counts()
    
    user_info.性别.value_counts()

    这个非常重要,后面会经常用到。

    3.离散化

    有时候,我们会碰到这样的需求,想要将年龄进行离散化(分桶),直白来说就是将年龄分成几个区间,这里我们想要将年龄分成 3 个区间段。就可以使用 Pandas 的 cut 方法来完成。

    # bins 整数,代表了均匀切分,等宽分箱
    pd.cut(grade.语文,3)

    
    

    #有时候离散化之后,想要给每个区间起个名字,可以指定 labels 参数
    pd.cut(grade.语文,3,labels=['低分','中等','高分'])

    可以看到, cut 自动生成了等距的离散区间,如果自己想定义也是没问题的。

    # bins 如果是一个序列, 代表指定切分位置
    # 0-60   60 - 100  100 - 150
    # right = False  代表左侧闭区间 ,右侧开区间
    pd.cut(grade.数学 , [-1 , 60 , 100, 151] , right =False )

    除了可以使用 cut 进行离散化之外,qcut 也可以实现离散化。cut 是根据每个值的大小来进行离散化的,qcut 是根据每个值出现的次数来进行离散化的。有时候等宽分箱,当样本分布不是很均匀的时候,结果不是很好,换成等深分箱,这样切分出的样本数是差不多的。

    # pd.qcut 等深分箱  , 保证分箱之后的区间中样本个数大体相等
    pd.qcut(grade.语文, 3)
    pd.qcut(grade.语文, 3).value_counts()

    4.排序功能

    在进行数据分析时,少不了进行数据排序。Pandas 支持两种排序方式:按轴(索引或列)排序和按实际值排序。

    1)按索引排序

    sort_index 方法默认是按照索引进行正序排的。

    2)按值排序

    如果想要实现按照实际值来排序,例如想要按照年龄排序,如何实现呢?

    使用 sort_values 方法,设置参数 by="***" 即可。

    # 降序排序
    eng.sort_values(ascending=False)
    # 按照英语进行排序
    grade.sort_values(by = '英语' , ascending=False)

    有时候我们可能需要按照多个值来排序,例如:按照年龄和城市来一起排序,可以设置参数 by 为一个 list 即可。注意:list 中每个元素的顺序会影响排序优先级的.

    # 按照英语进行排序 , 英语分数相同的, 以数学进行排序
    grade.sort_values(by =[ '英语', '数学'] , ascending=False)

    二、函数应用

     1.map

    map函数非常重要,学好了,半壁江山就拿下了。

     

    map()函数是python内置的高阶函数,对传入的list的每一个元素进行映射,返回一个新的映射之后的list

    python3中,map函数返回的是一个map对象,需要list(map(fun,itor))来将映射之后的map对象转换成列表

     2.applymap

    applymap 方法针对于 DataFrame,它作用于 DataFrame 中的每个元素,它对 DataFrame 的效果类似于 apply 对 Series 的效果。

    def f(x):
    #     print(type(x))
    #     print(x)
    #     print("-----")
        if type(x) == int: # 传进来的是数值
            return x * 2
        elif type(x) == str:
            return x * 3
    grade3 = grade[['语文','姓氏']]
    grade3
    
    grade3.applymap(f)

    三、表合并

    # 直接在后面追加新的数据
    grade_one.append(grade_two)
    # 一次性拼接多个表, 使用新的索引
    grade_one.append(  [grade_two , grade_one ,grade_two] ,
                     ignore_index=True)
    # 竖着拼接  和append一样
    pd.concat([grade_one , grade_two])
    # 横向拼接  以行索引进行拼接
    pd.concat([grade_one , grade_two] , axis=1)
    # 横向拼接  以行索引进行拼接 , 内连接 ,只保留拼接成功的数据
    pd.concat([grade_one , grade_two] ,join='inner', axis=1)

    第三个就是数据库拼接

    # 默认内连接  相当于并集
    pd.merge(grade_one , test ,left_on='姓名' , right_on='学生姓名')
    # 外连接  相当于交集
    pd.merge(grade_one , test ,left_on='姓名' , right_on='学生姓名',
            how='outer')
    # 左连接 左表有的都有
    pd.merge(grade_one , test ,left_on='姓名' , right_on='学生姓名',
            how='left')
    # 右连接 右表有的都有
    pd.merge(grade_one , test ,left_on='姓名' , right_on='学生姓名',
            how='right')

    重点:1. 描述统计 2. 离散化 3. 排序 4. 函数map ,applymap  5. 表合并 

    Pandas 不需要很多的逻辑思考,英文看懂,明白参数设置,用到的时候会查就行了。

  • 相关阅读:
    设计模式工厂模式
    设计模式原型模式
    Excel自定义格式千分符
    浏览器报:net::ERR_EMPTY_RESPONSE解决方案
    git branch a无法显示远程分支解决办法
    .Net启动程序报错:It was not possible to find any compatible framework version
    自动化测试框架pytest 安装和入门到精通实战
    2020非常全的接口测试面试题及参考答案软件测试工程师没有碰到算我输!
    Python+unittest+requests+excel实现接口自动化测试框架项目实战
    软件测试必学之python+unittest+requests+HTMLRunner编写接口自动化测试集
  • 原文地址:https://www.cnblogs.com/BC10/p/11683570.html
Copyright © 2011-2022 走看看