df.rank & pd.pivot_table & pd.read_excel & df添加行 &调整df行列顺序(reindex再理解)

1. df.rank

df.rank针对指定的序列进行排序(从大到小或从小到大),并返回排名的序列(从第一名到最后一名)
rank有两个重要参数:ascending、method。

  • ascending:为True时,表示按从小到大排列,即最小的为第一名,最大的为倒数第一名;ascending为False,则相反
  • method:主要控制当两个数值相等时,如何排名。如考试得分,小明和小红都考了100分,两人都是第一名还是一个第一名,一个第二名。此时下一个得99分的是第三名,还是第二名呢?
    • average:如下例,张三和李四并列第四名(同时占据第四、第五两个坑),那么两人的排名是4和5的平均值,下一个人是第6名
    • max:如下例,张三和李四占据第4、第5两个坑,那么两人都是第5名(4/5较大排名那个),下一个人是第6名
    • min:如下例,张三和李四占据第4、第5两个坑,那么两人都是第4名(4/5较小排名那个),下一个人是第6名
    • dense:张三和李四并列第四名,但是下一个人是第5名
    • first:张三和李四,谁先出现谁是第4名,另一个是第5名,下一个人是第6名
a = pd.Series([1, 2, 3, 4, 4, 6], index=['小明', '小红', '小张', '张三', '李四', '王五'])
a.rank(ascending=True, method='first')
小明    1.0
小红    2.0
小张    3.0
张三    4.0
李四    5.0
王五    6.0
dtype: float64

2. pd.pivot_table

pivot_table对应excel中的数据透视表。本章中所用df数据如下:
在这里插入图片描述
df.pivot_table有如下参数:

  • values=None,
  • index=None,
  • columns=None,
  • aggfunc=‘mean’,
  • fill_value=None,
  • margins=False,
  • dropna=True,
  • margins_name=‘All’,
  • observed=False,
    有些参数不常用就不赘述了,本章主要讲述几个很重要的参数

2.1 index

index即索引,其实透视图就是分组后聚合,index就是按照指定的列分组并作为index,其余列进行聚合操作(其余列应该为剩下的所有列,为什么没有月份一列呢,aggfunc时会讲)。代码、结果如下:
在这里插入图片描述
index也可以选择两列,设置多层索引,如下所示
在这里插入图片描述

2.2 aggfunc

上例中按照省份分组后,其余列聚合,那么是如何聚合呢,比如北京的土地,是将北京所有的土地求和吗?aggfunc就是负责如何聚合的,是北京所有土地求和,还是求平均值等等。默认是mean,即上例是北京所有土地求平均值。
在这里插入图片描述
aggfunc的函数不一定是max,min, sum这种内置函数,也可以是自定义含义或者匿名函数
在这里插入图片描述
涉及种类时也可以是
aggfunc=lambda x: x.unique()
上例index中留下一个问题,为什么其余列不包括月份,是因为讲述index时,aggfunc默认为mean,而月份是字符串,不能进行mean操作,故没有月份一列。

2.3 values

index选择需要分组的列作为索引,那么values就是选择对哪些列进行聚合操作。如针对省份进行分组,针对收入进行聚合操作
在这里插入图片描述
index和values都可以选择多个
在这里插入图片描述
讲述index时,没有设置values,默认是其余可以进行aggfunc操作的所有列

2.4 columns

index是针对每一行的名称进行分组,那么columns就是针对每一列的名称进行分组,选后选择需要进行聚合操作的列作为values进行aggfunc操作。
比如index=‘省份’, columns=‘月份’, values='收入’即index为省份的分组,columns为月份的分组,进行aggfunc操作的为收入的列。如北京1月的收入,北京2月的收入,具体如下:
在这里插入图片描述
同样的columns也可以设置多列,即列为多层。

2.5 fill_value&dropna

fill_value为将NaN填充的数值:
在这里插入图片描述
dropna=True即删除全部为NaN的列,本例中不涉及,故不再展示

3. pd.read_excel

除了常用的io、sheet_name、header、index_col。其他常用的如(数据依然是上一章的df):

  • skiprows:省略指定行的数据
    原始数据有四个河北省数据,现在省略第1-4行,故读出来的数据没有河北省的数据
    在这里插入图片描述
  • name:指定列的名称
    在这里插入图片描述
    发现列名不再是省份、月份、收入、土地,而是names指定的。

4. df添加行

4.1 append方法

df添加列很容易,但是行的话需要用append方法
在这里插入图片描述
这里的other即新添加的值。
新添加的值可以是list of list、字典、Series、DataFrame。如果是list of list,则默认的index为从0开始。
如果原始的df和other的index不一样,如df列名为A、B、C,新添加Series的index为A、B、D。那么,最终结果就会多一列D。
在这里插入图片描述
ignore_index为True即新加一行的index不会和原来df的index相同。如果为False则可能会和原来df的index相同。
特殊的,当Series有name时,ignore_index=False,则新加一行的index为name,为True时,新加一行的index为其他(根据df的index确定)
在这里插入图片描述
总而言之,ignore_index很重要,有时ignore_index=False会报错,为True时不会报错
下图为添加dataframe和concat操作有点像
在这里插入图片描述

4.2 concat方法

原始数据df是DataFrame,如果添加的是Series,就会出现如下情况
在这里插入图片描述
只有将a也变成DataFrame才行
在这里插入图片描述

4.3 loc

在这里插入图片描述
新添加的一行index也可以自定义:
在这里插入图片描述

5. 调整df行列顺序

无论行排序还是列排序,方法都是共用的。

  • 方法1:sort_index
    如果只是简单按照行名或者列名排序,则使用
    df.sort_index(axis=0)或df.sort_index(axis=1)
  • 方法2:reindex(极力推荐)
    reindex可以实现很多功能,先看下面的截图
    在这里插入图片描述
    可以发现如果新的index和原来index相同,那么就相当于实现了排序功能。无论新的index为何,新得到的数据,只有len(新index)个;新index与原始数据相同的index数据会被复制过来;新index新出现的index,新结果会自动添加(填充何值由method决定);原始数据有某一个index,称作a,但是新index没有,则index a所指的数据就会被删除。
    但help以下reindex,会发现reindex的功能不止上述:
    在这里插入图片描述
    可以发现reindex有很多参数,比较重要的有labels、index、columns、axis, method。上述例子只有一个参数,故是指定了labels。下面从排序的角度讲述这5个参数(假设新的索引和原始数据索引相同,等价于排序)
    我们知道sort_index可以通过axis来实现对index排序还是对columns排序。其实reindex也一样。
    label+axis=0就实现了对index按照自己想要的顺序进行重排的功能。其等效於单独使用index(index不能与axis并用)
    在这里插入图片描述
    label+axis=1就实现了对columns按照自己想要的顺序重排的功能。其等效於单独使用columns(columns不能与axis并用)
    在这里插入图片描述
    method的具体用法详见博客:https://blog.csdn.net/weixin_43178406/article/details/87460939
  • 方法3:loc
    在这里插入图片描述
    在这里插入图片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章