Pandas 系列文章:
- Python 数据分析三剑客之 Pandas(一):认识 Pandas 及其 Series、DataFrame 对象
- Python 数据分析三剑客之 Pandas(二):Index 索引对象以及各种索引操作
- Python 数据分析三剑客之 Pandas(三):算术运算与缺失值的处理
- Python 数据分析三剑客之 Pandas(四):函数应用、映射、排序和层级索引
- Python 数据分析三剑客之 Pandas(五):统计计算与统计描述
- Python 数据分析三剑客之 Pandas(六):GroupBy 数据分裂、应用与合并
- Python 数据分析三剑客之 Pandas(七):合并数据集
- Python 数据分析三剑客之 Pandas(八):数据重塑、重复数据处理与数据替换
- Python 数据分析三剑客之 Pandas(九):时间序列
- Python 数据分析三剑客之 Pandas(十):数据读写
专栏:
【NumPy 专栏】【Pandas 专栏】【Matplotlib 专栏】
推荐学习资料与网站:
【NumPy 中文网】【Pandas 中文网】【Matplotlib 中文网】【NumPy、Matplotlib、Pandas 速查表】
1 | 这里是一段防爬虫文本,请读者忽略。 |
【01x00】函数应用和映射
Pandas 可直接使用 NumPy 的 ufunc(元素级数组方法) 函数:
1 | import pandas as pd |
函数映射:在 Pandas 中 apply
方法可以将函数应用到列或行上,可以通过设置 axis 参数来指定行或列,默认 axis = 0,即按列映射:
1 | import pandas as pd |
另外还可以通过 applymap
将函数映射到每个数据上:
1 | import pandas as pd |
【02x00】排序
【02x01】sort_index() 索引排序
根据条件对数据集排序(sorting)也是一种重要的内置运算。要对行或列索引进行排序(按字典顺序),可使用 sort_index
方法,它将返回一个已排序的新对象。
在 Series 和 DataFrame 中的基本语法如下:
1 | Series.sort_index(self, |
1 | DataFrame.sort_index(self, |
官方文档:
- https://pandas.pydata.org/docs/reference/api/pandas.Series.sort_index.html
- https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.sort_index.html
常用参数描述如下:
参数 | 描述 |
---|---|
axis | 指定轴排序,0 or ‘index’ ,1 or ‘columns’ ,只有在 DataFrame 中才有 1 or 'columns’ |
ascending | 为 True 时升序排序(默认),为 False 时降序排序 |
kind | 排序方法,quicksort :快速排序(默认);'mergesort’ :归并排序;'heapsort' :堆排序;具体可参见 numpy.sort() |
在 Series 中的应用(按照索引 index 排序):
1 | import pandas as pd |
在 DataFrame 中的应用(可按照索引 index 或列标签 columns 排序):
1 | import pandas as pd |
【02x02】sort_values() 按值排序
在 Series 和 DataFrame 中的基本语法如下:
1 | Series.sort_values(self, |
1 | DataFrame.sort_values(self, |
官方文档:
https://pandas.pydata.org/docs/reference/api/pandas.Series.sort_values.html
https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.sort_values.html
常用参数描述如下:
参数 | 描述 |
---|---|
by | DataFrame 中的必须参数,指定列的值进行排序,Series 中没有此参数 |
axis | 指定轴排序,0 or ‘index’ ,1 or ‘columns’ ,只有在 DataFrame 中才有 1 or 'columns’ |
ascending | 为 True 时升序排序(默认),为 False 时降序排序 |
kind | 排序方法,quicksort :快速排序(默认);'mergesort’ :归并排序;'heapsort' :堆排序;具体可参见 numpy.sort() |
在 Series 中的应用,按照值排序,如果有缺失值,默认都会被放到 Series 的末尾:
1 | import pandas as pd |
在 DataFrame 中的应用,有时候可能希望根据一个或多个列中的值进行排序。将一个或多个列的名字传递给 sort_values()
的 by
参数即可达到该目的,当传递多个列时,首先会对第一列进行排序,若第一列有相同的值,再根据第二列进行排序,依次类推:
1 | import pandas as pd |
1 | import pandas as pd |
【02x03】rank() 返回排序后元素索引
rank() 函数会返回一个对象,对象的值是原对象经过排序后的索引值,即下标。
在 Series 和 DataFrame 中的基本语法如下:
1 | Series.rank(self: ~ FrameOrSeries, |
1 | DataFrame.rank(self: ~ FrameOrSeries, |
官方文档:
https://pandas.pydata.org/docs/reference/api/pandas.Series.rank.html
https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.rank.html
常用参数描述如下:
参数 | 描述 |
---|---|
axis | 指定轴排序,0 or ‘index’ ,1 or ‘columns’ ,只有在 DataFrame 中才有 1 or 'columns’ |
method | 有相同值时,如何处理:‘average’ :默认值,去两个相同索引的平均值;‘min’ :取两个相同索引的最小值;‘max’ :取两个相同索引的最大值;‘first’ :按照出现的先后顺序;‘dense’ :和 'min' 差不多,但是各组之间总是+1的,不太好解释,可以看后面的示例 |
ascending | 为 True 时升序排序(默认),为 False 时降序排序 |
在 Series 中的应用,按照值排序,如果有缺失值,默认都会被放到 Series 的末尾:
1 | import pandas as pd |
在 DataFrame 中可以使用 axis 参数来指定轴:
1 | import pandas as pd |
1 | 这里是一段防爬虫文本,请读者忽略。 |
【03x00】层级索引
【03x01】认识层级索引
以下示例将创建一个 Series 对象, 索引 Index 由两个子 list 组成,第一个子 list 是外层索引,第二个 list 是内层索引:
1 | import pandas as pd |
【03x02】MultiIndex 索引对象
官方文档:https://pandas.pydata.org/docs/reference/api/pandas.MultiIndex.html
尝试打印上面示例中 Series 的索引类型,会得到一个 MultiIndex 对象,MultiIndex 对象的 levels 属性表示两个层级中分别有那些标签,codes 属性表示每个位置分别是什么标签,如下所示:
1 | import pandas as pd |
通常可以使用 from_arrays()
方法来将数组对象转换为 MultiIndex 索引对象:
1 | 1, 1, 2, 2], ['red', 'blue', 'red', 'blue']] arrays = [[ |
其他常用方法见下表(更多方法参见官方文档):
方法 | 描述 |
---|---|
from_arrays(arrays[, sortorder, names]) | 将数组转换为 MultiIndex |
from_tuples(tuples[, sortorder, names]) | 将元组列表转换为 MultiIndex |
from_product(iterables[, sortorder, names]) | 将多个可迭代的笛卡尔积转换成 MultiIndex |
from_frame(df[, sortorder, names]) | 将 DataFrame 对象转换为 MultiIndex |
set_levels(self, levels[, level, inplace, …]) | 为 MultiIndex 设置新的 levels |
set_codes(self, codes[, level, inplace, …]) | 为 MultiIndex 设置新的 codes |
sortlevel(self[, level, ascending, …]) | 根据 level 进行排序 |
droplevel(self[, level]) | 删除指定的 level |
swaplevel(self[, i, j]) | 交换 level i 与 level i,即交换外层索引与内层索引 |
【03x03】提取值
对于这种有多层索引的对象,如果只传入一个参数,则会对外层索引进行提取,其中包含对应所有的内层索引,如果传入两个参数,则第一个参数表示外层索引,第二个参数表示内层索引,示例如下:
1 | import pandas as pd |
【03x04】交换分层与排序
MultiIndex 对象的 swaplevel()
方法可以交换外层与内层索引,sortlevel()
方法会先对外层索引进行排序,再对内层索引进行排序,默认是升序,如果设置 ascending
参数为 False 则会降序排列,示例如下:
1 | import pandas as pd |
1 | 这里是一段防爬虫文本,请读者忽略。 |