暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Python-63 pandas 数据筛选和汇总

Rhonin晴朗台风天 2021-10-03
2137

 顺序:1生成数据表-2数据表检查-3数据表清洗-4数据预处理-5数据提取-6数据筛选-7数据汇总-8数据统计-9数据输出

进度:完成1、2、3、4、5、9。



01



数据筛选


1、按条件筛选:变量.loc[(变量['列名']>1)&/|(变量['列名']==1),[['列名'……]]

与:&

    dt
    Out[202]:
    cno cname cpno ccredit
    0 1 数据库 5.0 4
    1 2 数 学 NaN 2
    2 3 信息系统 1.0 4
    3 4 操作系统 6.0 3
    0 5 数据结构 7.0 4
    1 6 数据处理 NaN 2
    2 7 PASCAL语言 6.0 4


    dt.loc[(dt['cno']>1)&(dt['ccredit']==4),['cno','cname','ccredit']]
    Out[201]:
    cno cname ccredit
    2 3 信息系统 4
    0 5 数据结构 4
    2 7 PASCAL语言 4

    或:|

      dt.loc[(dt['cno']>1)|(dt['ccredit']==4),['cno','cname','ccredit']]
      Out[203]:
      cno cname ccredit
      0 1 数据库 4
      1 2 数 学 2
      2 3 信息系统 4
      3 4 操作系统 3
      0 5 数据结构 4
      1 6 数据处理 2
      2 7 PASCAL语言 4

      非:!=

        dt.loc[(dt['cname']!='数据处理')|(dt['ccredit']==4),['cno','cname','ccredit']]
        Out[205]:
        cno cname ccredit
        0 1 数据库 4
        1 2 数 学 2
        2 3 信息系统 4
        3 4 操作系统 3
        0 5 数据结构 4
        2 7 PASCAL语言 4

        2、excel 中 sumifs :以上.列名.sum()

          dt.loc[(dt['cno']>1)&(dt['ccredit']==4),['cno','cname','ccredit']].ccredit.sum()
          Out[204]: 12

          3、excel 中的 countifs:以上.列名.count()

            dt.loc[(dt['cname']!='数据处理')|(dt['ccredit']==4),['cno','cname','ccredit']].cname.count()
            Out[207]: 6

            4、变量.query('列名==列名/[值……]')

              dt.query('cno<ccredit')
              Out[212]:
              cno cname cpno ccredit
              0 1 数据库 5.0 4
              2 3 信息系统 1.0 4


              dt.query('cno==[2,3]')
              Out[214]:
              cno cname cpno ccredit
              1 2 数 学 NaN 2
              2 3 信息系统 1.0 4



              02



              数据汇总


              1、分类汇总groupby

              变量.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=NoDefault.no_default, observed=False, dropna=True).sum/mean/count()后面要跟运算符才能显示。

              level int, level name, or sequence of such, 默认无。组级别

                dt.groupby(level=0).mean()
                Out[224]:
                cno cpno ccredit
                0 1.5 3.5 4.5
                1 2.5 3.0 3.5
                2 3.5 2.5 4.5
                3  4.0   6.0      3.0

                列表设置N层分组

                  dt.groupby(['cno','ccredit']).sum()
                  Out[226]:
                  cpno
                  cno ccredit
                  1 4 5.0
                  2 2 0.0
                  5 2.0
                  3 4 1.0
                  5 3.0
                  4 3 6.0
                  5 4.0

                  指定列汇总groupby()['列名'].count()

                    dt.groupby('cno')['ccredit'].count()
                    Out[228]:
                    cno
                    1 1
                    2 2
                    3 2
                    4 2
                    Name: ccredit, dtype: int64

                    2、数据透视pivot_table

                    pd.pivot_table(data, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All', observed=False, sort=True)

                    fill_value标量,默认无。用于替换缺失值的值(在结果数据透视表中,聚合后)

                      pd.pivot_table(dt,values='ccredit',index=['cno'],columns=['cname'])
                      Out[230]:
                      cname 数据库 信息系统 操作系统 数 学
                      cno
                      1 4.0 NaN NaN NaN
                      2 NaN NaN NaN 3.5
                      3 NaN 4.5 NaN NaN
                      4 NaN NaN 4.0 NaN


                      pd.pivot_table(dt,values='ccredit',index=['cno'],columns=['cname'],fill_value=0)
                      Out[231]:
                      cname 数据库 信息系统 操作系统 数 学
                      cno
                      1 4 0.0 0 0.0
                      2 0 0.0 0 3.5
                      3 0 4.5 0 0.0
                      4 0 0.0 4 0.0

                      aggfunc函数,函数列表,字典,默认 numpy.mean,也可用np.sum/.average/.std/.var等。

                      对多列取平均值进行聚合:aggfunc={'D': np.mean,'E': np.mean}

                      为任何给定的值列计算多种类型的聚合:aggfunc={'D': np.mean,'E': [min, max, np.mean]}

                        pd.pivot_table(dt,values='ccredit',index=['cno'],columns=['cname'],aggfunc=np.sum)
                        Out[232]:
                        cname 数据库 信息系统 操作系统 数 学
                        cno
                        1 4.0 NaN NaN NaN
                        2 NaN NaN NaN 7.0
                        3 NaN 9.0 NaN NaN
                        4 NaN NaN 8.0 NaN


                        pd.pivot_table(dt,values='ccredit',index=['cno'],columns=['cname'],aggfunc=np.std)
                        Out[233]:
                        cname 信息系统 操作系统 数 学
                        cno
                        2 NaN NaN 2.12132
                        3 0.707107 NaN NaN
                        4           NaN  1.414214      NaN

                        margins:布尔值,默认为 False。添加所有行/列(例如小计/总计)

                          pd.pivot_table(dt,values='ccredit',index=['cno'],columns=['cname'],aggfunc=np.sum,margins=True)
                          Out[234]:
                          cname 数据库 信息系统 操作系统 数 学 All
                          cno
                          1 4.0 NaN NaN NaN 4
                          2 NaN NaN NaN 7.0 7
                          3 NaN 9.0 NaN NaN 9
                          4 NaN NaN 8.0 NaN 8
                          All 4.0 9.0 8.0 7.0 28


                          03



                          数据统计



                          1、数据采样:变量.sample(n=,weights=[权重],replace=False采用不放回)

                            dt.sample(n=3)
                            Out[235]:
                            cno cname cpno ccredit
                            0 1 数据库 5.0 4
                            2 3 信息系统 1.0 4
                            2 4 操作系统 4.0 5

                            以下以前已有学习过,不再赘述:Python55-Pandas库与Series、DataFrame数据类型
                            2、描述统计:变量.describe().roud(2).T

                            3、标准差:.std()

                            4、协方差:.cov()

                            5、相关分析:.corr()


                            至此咱们关于pandas比较基础的数据处理学完了,等什么时候有空咱们搞多点数据好好操练操练。
                            本来我还没打算那么快进入数据挖掘,想把基础打好多练练代码,但因为个人原因,近期会开始了解一些算法模型,大家一起加油鸭!




                            文章转载自Rhonin晴朗台风天,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                            评论