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

分享14条非常实用的Pandas函数方法,建议珍藏!!

关于数据分析与可视化 2021-09-26
414

今天和大家来分享几个十分好用的pandas函数,可能平时并不是特别的常见,但是却能够帮助我们在平时的工作、学习当中极大的提高效率,小编也希望读者朋友们在看完本文之后能够大有收获



1
ExcelWriter

使用ExcelWriter()可以向同一个excel的不同sheet中写入对应的表格数据,首先要创建一个writer对象,传入的主要参数为文件名及其路径

    import pandas as pd


    a = pd.DataFrame({
    "a": [1, 2, 3, 4, 5],
        "b": [256810],
    })
    b = pd.DataFrame({
        "c": [52314],
        "d": [257810],
    })
      # 写入到同一个excel当中去
      with pd.ExcelWriter("data.xlsx") as writer:


      a.to_excel(writer, sheet_name="a_sheet", index = False)
      b.to_excel(writer, sheet_name="b_sheet", index = False)


      2
      pipe

      pipe()方法可以将一连串的函数以链式的结构嵌套在数据集当中,例如一个脏数据集当中有重复值、空值和极值等等,我们分别建立了3个函数来"drop_duplicates","remove_outliers"和"fill_nans"分别处理上面提到的3个问题,然后用pipe()方法将这三个函数以链式的结构串联起来作用在同一个数据集上面,代码如下图所示

        df_preped = (df.pipe(drop_duplicates).
                     pipe(remove_outliers, ['price''carat''depth']).
                     pipe(encode_categoricals, ['cut''color''clarity'])
        )


        3
        explode

        我们可以通过一个简单的例子来说明一下该函数的作用,
          df = pd.Series(
          [1, 6, 7, [46, 56, 49], 45, [15, 10, 12]]
          ).to_frame("dirty")

            df.explode("dirty", ignore_index=True)

            要是遇到一行的数据当中含有多个元素,explode()方法可以将这一行的数据展开到多行,ignore_index = True,意味着数据展开来之后,索引也会逐行地递增


            4
            between

            between是用来提取出给定范围当中的值的,看下面的例子
              data = {'name': ['John', 'Mike', 'Tom', 'Greg', 'Jim'],
                      'income': [80009000100001000020000],
              'age': [20, 24, 25, 23, 28]}
              df = pd.DataFrame(data)

              我们挑选出收入在8000到10000范围之内的数据

                df[df['income'].between(8000, 10000, inclusive='neither')]



                5
                convert_dtypes

                pandas当中的convert_dtypes可以自动推断数据类型并且进行转化,例如
                  df = pd.DataFrame(
                  {'a':[1,2,3],
                  'b':[0.55,0.66,1.55],
                  'c':['Jack','Tony','Posi']}
                  )
                  df.dtypes

                    df.convert_dtypes().dtypes



                    6
                    select_dtypes

                    pandas当中的select_dtypes()方法功能是返回那些指定数据类型的列,当中的include顾名思义就是筛选出指定数据类型的列,例如下面我们挑选出是bool数据类型的数据来

                      a = pd.DataFrame({
                      "a": [1, 2, 3, 4, 5],
                      "b": [True, False, False, True, True],
                      "c": ["John", "Tom", "Mike", "Jim", "Dylan"]
                      })
                        a.select_dtypes(include='bool')

                        而exclude就是排除掉指定数据类型的数据,将其他类型的数据筛选出来

                          a.select_dtypes(exclude='bool')



                          7
                          mask

                          pandas当中的mask()方法主要是对按照指定的条件对数据集当中的数据进行替换,例如下面数据集当中对于大于0的数据替换成0

                            df = pd.DataFrame({"A":[12, 4, 5, 44, 1], 
                            "B":[5, 2, 54, 3, 2],
                            "C":[20, 16, 7, 3, 8],
                                               "D":[14, 3, 17, 2, 6]}) 

                              # 将大于10的数字替换成0
                              df.mask(df > 10, 0)



                              8
                              nlargest和nsmallest

                              nlargest和nsmallest的作用在于可以让我们看到根据特定的列排序的最大或者是最小的若干列,例如

                                data = {'name': ['John', 'Mike', 'Tom', 'Greg', 'Jim'],
                                'income': [2500, 4500, 5000, 3000, 2000],
                                'age': [20, 24, 25, 23, 28]}
                                df = pd.DataFrame(data)

                                我们按照income这一列将数据排序,并且显示出最大的前3行

                                  df.nlargest(3, 'income')



                                  9
                                  idxmax和idxmin

                                  主要用来返回最大值或者是最小值的位置,也就是索引值

                                    data = {'income': [8000, 9000, 10000, 10000, 20000],
                                            'age': [2024252328]}
                                    df = pd.DataFrame(data, index = ['John''Mike''Tom''Greg''Jim'])

                                    我们找出income最高和最低的那个人是谁
                                      df['income'].idxmax()
                                      >>>> Jim


                                      df['income'].idxmin()
                                      >>> John


                                      10
                                      clip

                                      在给出指定范围的前提下,对于数据集当中超出该范围的值进行更改,例如我们将范围限定在-4到6之间,超过6的数字会被设置为6,超过-4的数字会被设置为-4

                                        data = {'col_0': [9, -3, 0, -1, 5],
                                        'col_1': [-2, -7, 6, 8, -5]}
                                        df = pd.DataFrame(data)

                                          df.clip(-4, 6)



                                          11
                                          at_time和between_time

                                          pandas当中at_time()方法和between_time()方法主要是用来处理时间序列的数据,根据给出的时间点或者时间范围来筛选出数据

                                            index = pd.date_range("2021-08-01", periods=100, freq="H")
                                            data = pd.DataFrame({"col": list(range(100))}, index=index)
                                            data.head()

                                            我们筛选出那些下午2点的数据
                                              data.at_time("14:00")
                                              当然我们可以使用between_time这个方法来挑选出某个时间范围内的数
                                                data.between_time("11:00", "12:00")



                                                12
                                                at和iat

                                                我们一般用pandas当中的loc和iloc比较多,用来筛选出我们想要的数据,而at和iat也能够实现loc和iloc的功能,而且更加的快捷
                                                  data = {'name': ['John', 'Mike', 'Tom', 'Greg', 'Jim'],
                                                  'income': [8000, 9000, 10000, 10000, 20000],
                                                  'age': [20, 24, 25, 23, 28]}
                                                  df = pd.DataFrame(data)

                                                    # [index, label]
                                                    df.at[1, "income"]
                                                    >>> 9000


                                                    [index, index]
                                                    df.iat[2, 3]
                                                    >>> 1000


                                                    13
                                                    pandas styler

                                                    pandas还能够对数据集当中的数据进行上色,我们可以通过该方法将某些我们觉得重要的数据给标注出来,例如我们对数据集中每列的最大值最小值标注出来

                                                      df = pd.DataFrame(np.random.randn(5, 5), columns=list('ABCDE'))


                                                      # 我们标注出最大、最小的值
                                                      df.style.highlight_max(color = "yellow")

                                                      具体的可以去小编另外写的一篇文章中去看个究竟:厉害了,Pandas表格还能五彩斑斓的展示数据,究竟是怎么做到的呢?



                                                      14
                                                      hasnans

                                                      假如数据集当中存在空值,可以用hasnans方法来检查,要是有空值,则返回True,反之则返回False
                                                        s = pd.Series([2, 4, 6, "abcde", np.nan])
                                                        s.hasnans
                                                        >>>> True



                                                        历史文章

                                                        可视化图表告诉你,这部让网友直呼过瘾的国产剧究竟火在哪里

                                                        干货分享 | 如何用Python来操作PDF文件,建议收藏

                                                        职场性骚扰、PUA、性别歧视?数说现在的打工人日子过得到底有多难

                                                        世界500强最新一轮排名出炉,最赚钱的行业竟然是它!?


                                                        分享、收藏、点赞、在看安排一下?
                                                        文章转载自关于数据分析与可视化,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                                        评论