权4网站怎么做,网站注册的账号怎么注销,wordpress登录用户可以搜索,做网站的是怎么赚钱的CSDN 课程推荐#xff1a;《迈向数据科学家#xff1a;带你玩转Python数据分析》#xff0c;讲师齐伟#xff0c;苏州研途教育科技有限公司CTO#xff0c;苏州大学应用统计专业硕士生指导委员会委员#xff1b;已出版《跟老齐学Python#xff1a;轻松入门》《跟老齐学Py…
CSDN 课程推荐《迈向数据科学家带你玩转Python数据分析》讲师齐伟苏州研途教育科技有限公司CTO苏州大学应用统计专业硕士生指导委员会委员已出版《跟老齐学Python轻松入门》《跟老齐学PythonDjango实战》、《跟老齐学Python数据分析》和《Python大学实用教程》畅销图书。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、Matplotlib 系列文章已更新完毕欢迎关注
NumPy 系列文章https://itrhx.blog.csdn.net/category_9780393.htmlMatplotlib 系列文章https://itrhx.blog.csdn.net/category_9780418.html 推荐学习资料与网站博主参与部分文档翻译
NumPy 官方中文网https://www.numpy.org.cn/Pandas 官方中文网https://www.pypandas.cn/Matplotlib 官方中文网https://www.matplotlib.org.cn/NumPy、Matplotlib、Pandas 速查表https://github.com/TRHX/Python-quick-reference-table 文章目录【01x00】函数应用和映射【02x00】排序【02x01】sort_index() 索引排序【02x02】sort_values() 按值排序【02x03】rank() 返回排序后元素索引【03x00】层级索引【03x01】认识层级索引【03x02】MultiIndex 索引对象【03x03】提取值【03x04】交换分层与排序这里是一段防爬虫文本请读者忽略。
本文原创首发于 CSDN作者 TRHX。
博客首页https://itrhx.blog.csdn.net/
本文链接https://itrhx.blog.csdn.net/article/details/106758103
未经授权禁止转载恶意转载后果自负尊重原创远离剽窃【01x00】函数应用和映射
Pandas 可直接使用 NumPy 的 ufunc元素级数组方法 函数 import pandas as pdimport numpy as npobj pd.DataFrame(np.random.randn(5,4) - 1)obj0 1 2 3
0 -0.228107 1.377709 -1.096528 -2.051001
1 -2.477144 -0.500013 -0.040695 -0.267452
2 -0.485999 -1.232930 -0.390701 -1.947984
3 -0.839161 -0.702802 -1.756359 -1.873149
4 0.853121 -1.540105 0.621614 -0.583360np.abs(obj)0 1 2 3
0 0.228107 1.377709 1.096528 2.051001
1 2.477144 0.500013 0.040695 0.267452
2 0.485999 1.232930 0.390701 1.947984
3 0.839161 0.702802 1.756359 1.873149
4 0.853121 1.540105 0.621614 0.583360函数映射在 Pandas 中 apply 方法可以将函数应用到列或行上可以通过设置 axis 参数来指定行或列默认 axis 0即按列映射 import pandas as pdimport numpy as npobj pd.DataFrame(np.random.randn(5,4) - 1)obj0 1 2 3
0 -0.707028 -0.755552 -2.196480 -0.529676
1 -0.772668 0.127485 -2.015699 -0.283654
2 0.248200 -1.940189 -1.068028 -1.751737
3 -0.872904 -0.465371 -1.327951 -2.883160
4 -0.092664 0.258351 -1.010747 -2.313039obj.apply(lambda x : x.max())
0 0.248200
1 0.258351
2 -1.010747
3 -0.283654
dtype: float64obj.apply(lambda x : x.max(), axis1)
0 -0.529676
1 0.127485
2 0.248200
3 -0.465371
4 0.258351
dtype: float64另外还可以通过 applymap 将函数映射到每个数据上 import pandas as pdimport numpy as npobj pd.DataFrame(np.random.randn(5,4) - 1)obj0 1 2 3
0 -0.772463 -1.597008 -3.196100 -1.948486
1 -1.765108 -1.646421 -0.687175 -0.401782
2 0.275699 -3.115184 -1.429063 -1.075610
3 -0.251734 -0.448399 -3.077677 -0.294674
4 -1.495896 -1.689729 -0.560376 -1.808794obj.applymap(lambda x : %.2f % x)0 1 2 3
0 -0.77 -1.60 -3.20 -1.95
1 -1.77 -1.65 -0.69 -0.40
2 0.28 -3.12 -1.43 -1.08
3 -0.25 -0.45 -3.08 -0.29
4 -1.50 -1.69 -0.56 -1.81【02x00】排序
【02x01】sort_index() 索引排序
根据条件对数据集排序sorting也是一种重要的内置运算。要对行或列索引进行排序按字典顺序可使用 sort_index 方法它将返回一个已排序的新对象。
在 Series 和 DataFrame 中的基本语法如下
Series.sort_index(self,axis0,levelNone,ascendingTrue,inplaceFalse,kindquicksort,na_positionlast,sort_remainingTrue,ignore_index: bool False)DataFrame.sort_index(self,axis0,levelNone,ascendingTrue,inplaceFalse,kindquicksort,na_positionlast,sort_remainingTrue,ignore_index: bool False)官方文档
https://pandas.pydata.org/docs/reference/api/pandas.Series.sort_index.htmlhttps://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 排序 import pandas as pdobj pd.Series(range(4), index[d, a, b, c])obj
d 0
a 1
b 2
c 3
dtype: int64obj.sort_index()
a 1
b 2
c 3
d 0
dtype: int64在 DataFrame 中的应用可按照索引 index 或列标签 columns 排序 import pandas as pdobj pd.DataFrame(np.arange(8).reshape((2, 4)), index[three, one], columns[d, a, b, c])objd a b c
three 0 1 2 3
one 4 5 6 7obj.sort_index()d a b c
one 4 5 6 7
three 0 1 2 3obj.sort_index(axis1)a b c d
three 1 2 3 0
one 5 6 7 4obj.sort_index(axis1, ascendingFalse)d c b a
three 0 3 2 1
one 4 7 6 5【02x02】sort_values() 按值排序
在 Series 和 DataFrame 中的基本语法如下
Series.sort_values(self,axis0,ascendingTrue,inplaceFalse,kindquicksort,na_positionlast,ignore_indexFalse)DataFrame.sort_values(self,by,axis0,ascendingTrue,inplaceFalse,kindquicksort,na_positionlast,ignore_indexFalse)官方文档 https://pandas.pydata.org/docs/reference/api/pandas.Series.sort_values.html https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.sort_values.html
常用参数描述如下
参数描述byDataFrame 中的必须参数指定列的值进行排序Series 中没有此参数axis指定轴排序0 or ‘index’1 or ‘columns’只有在 DataFrame 中才有 1 or columns’ascending为 True时升序排序默认为 False时降序排序kind排序方法quicksort快速排序默认mergesort’归并排序heapsort堆排序具体可参见 numpy.sort()
在 Series 中的应用按照值排序如果有缺失值默认都会被放到 Series 的末尾 import pandas as pdobj pd.Series([4, 7, -3, 2])obj
0 4
1 7
2 -3
3 2
dtype: int64obj.sort_values()
2 -3
3 2
0 4
1 7
dtype: int64obj pd.Series([4, np.nan, 7, np.nan, -3, 2])obj
0 4.0
1 NaN
2 7.0
3 NaN
4 -3.0
5 2.0
dtype: float64obj.sort_values()
4 -3.0
5 2.0
0 4.0
2 7.0
1 NaN
3 NaN
dtype: float64在 DataFrame 中的应用有时候可能希望根据一个或多个列中的值进行排序。将一个或多个列的名字传递给 sort_values() 的 by 参数即可达到该目的当传递多个列时首先会对第一列进行排序若第一列有相同的值再根据第二列进行排序依次类推 import pandas as pdobj pd.DataFrame({a: [4, 4, -3, 2], b: [0, 1, 0, 1], c: [6, 4, 1, 3]})obja b c
0 4 0 6
1 4 1 4
2 -3 0 1
3 2 1 3obj.sort_values(byc)a b c
2 -3 0 1
3 2 1 3
1 4 1 4
0 4 0 6obj.sort_values(byc, ascendingFalse)a b c
0 4 0 6
1 4 1 4
3 2 1 3
2 -3 0 1obj.sort_values(by[a, b])a b c
2 -3 0 1
3 2 1 3
0 4 0 6
1 4 1 4import pandas as pdobj pd.DataFrame({a: [4, 4, -3, 2], b: [0, 1, 0, 1], c: [6, 4, 1, 3]}, index[A, B, C, D])obja b c
A 4 0 6
B 4 1 4
C -3 0 1
D 2 1 3obj.sort_values(byB, axis1)b a c
A 0 4 6
B 1 4 4
C 0 -3 1
D 1 2 3【02x03】rank() 返回排序后元素索引
rank() 函数会返回一个对象对象的值是原对象经过排序后的索引值即下标。
在 Series 和 DataFrame 中的基本语法如下
Series.rank(self: ~ FrameOrSeries,axis0,method: str average,numeric_only: Union[bool, NoneType] None,na_option: str keep,ascending: bool True,pct: bool False)DataFrame.rank(self: ~ FrameOrSeries,axis0,method: str average,numeric_only: Union[bool, NoneType] None,na_option: str keep,ascending: bool True,pct: bool False)官方文档 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 的末尾 import pandas as pdobj pd.Series([7, -5, 7, 4, 2, 0, 4])obj
0 7
1 -5
2 7
3 4
4 2
5 0
6 4
dtype: int64obj.rank()
0 6.5 # 第 0 个和第 2 个值从小到大排名分别为 6 和 7默认取平均值即 6.5
1 1.0
2 6.5
3 4.5 # 第 3 个和第 6 个值从小到大排名分别为 4 和 5默认取平均值即 4.5
4 3.0
5 2.0
6 4.5
dtype: float64obj.rank(methodfirst)
0 6.0 # 第 0 个和第 2 个值从小到大排名分别为 6 和 7按照第一次出现排序分别为 6 和 7
1 1.0
2 7.0
3 4.0 # 第 3 个和第 6 个值从小到大排名分别为 4 和 5按照第一次出现排序分别为 4 和 5
4 3.0
5 2.0
6 5.0
dtype: float64obj.rank(methoddense)
0 5.0 # 第 0 个和第 2 个值从小到大排名分别为 6 和 7按照最小值排序但 dense 规定间隔为 1 所以为 5
1 1.0
2 5.0
3 4.0 # 第 3 个和第 6 个值从小到大排名分别为 4 和 5按照最小值排序即 4
4 3.0
5 2.0
6 4.0
dtype: float64obj.rank(methodmin)
0 6.0 # 第 0 个和第 2 个值从小到大排名分别为 6 和 7按照最小值排序即 6
1 1.0
2 6.0
3 4.0 # 第 3 个和第 6 个值从小到大排名分别为 4 和 5按照最小值排序即 4
4 3.0
5 2.0
6 4.0
dtype: float64在 DataFrame 中可以使用 axis 参数来指定轴 import pandas as pdobj pd.DataFrame({b: [4.3, 7, -3, 2], a: [0, 1, 0, 1], c: [-2, 5, 8, -2.5]})objb a c
0 4.3 0 -2.0
1 7.0 1 5.0
2 -3.0 0 8.0
3 2.0 1 -2.5obj.rank()b a c
0 3.0 1.5 2.0
1 4.0 3.5 3.0
2 1.0 1.5 4.0
3 2.0 3.5 1.0obj.rank(axiscolumns)b a c
0 3.0 2.0 1.0
1 3.0 1.0 2.0
2 1.0 2.0 3.0
3 3.0 2.0 1.0这里是一段防爬虫文本请读者忽略。
本文原创首发于 CSDN作者 TRHX。
博客首页https://itrhx.blog.csdn.net/
本文链接https://itrhx.blog.csdn.net/article/details/106758103
未经授权禁止转载恶意转载后果自负尊重原创远离剽窃【03x00】层级索引
【03x01】认识层级索引
以下示例将创建一个 Series 对象 索引 Index 由两个子 list 组成第一个子 list 是外层索引第二个 list 是内层索引 import pandas as pdimport numpy as npobj pd.Series(np.random.randn(12),index[[a, a, a, b, b, b, c, c, c, d, d, d], [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2]])obj
a 0 -0.2015361 -0.6290582 0.766716
b 0 -1.2558311 -0.4837272 -0.018653
c 0 0.7887871 1.0100972 -0.187258
d 0 1.2423631 -0.8220112 -0.085682
dtype: float64【03x02】MultiIndex 索引对象
官方文档https://pandas.pydata.org/docs/reference/api/pandas.MultiIndex.html
尝试打印上面示例中 Series 的索引类型会得到一个 MultiIndex 对象MultiIndex 对象的 levels 属性表示两个层级中分别有那些标签codes 属性表示每个位置分别是什么标签如下所示 import pandas as pdimport numpy as npobj pd.Series(np.random.randn(12),index[[a, a, a, b, b, b, c, c, c, d, d, d], [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2]])obj
a 0 0.0359461 -0.8672152 -0.053355
b 0 -0.9866161 0.0260712 -0.048394
c 0 0.2512741 0.2177902 1.137674
d 0 -1.2451781 1.2349722 -0.035624
dtype: float64type(obj.index)
class pandas.core.indexes.multi.MultiIndexobj.index
MultiIndex([(a, 0),(a, 1),(a, 2),(b, 0),(b, 1),(b, 2),(c, 0),(c, 1),(c, 2),(d, 0),(d, 1),(d, 2)],)obj.index.levels
FrozenList([[a, b, c, d], [0, 1, 2]])obj.index.codes
FrozenList([[0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3], [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2]])通常可以使用 from_arrays() 方法来将数组对象转换为 MultiIndex 索引对象 arrays [[1, 1, 2, 2], [red, blue, red, blue]]pd.MultiIndex.from_arrays(arrays, names(number, color))
MultiIndex([(1, red),(1, blue),(2, red),(2, blue)],names[number, color])其他常用方法见下表更多方法参见官方文档
方法描述from_arrays(arrays[, sortorder, names])将数组转换为 MultiIndexfrom_tuples(tuples[, sortorder, names])将元组列表转换为 MultiIndexfrom_product(iterables[, sortorder, names])将多个可迭代的笛卡尔积转换成 MultiIndexfrom_frame(df[, sortorder, names])将 DataFrame 对象转换为 MultiIndexset_levels(self, levels[, level, inplace, …])为 MultiIndex 设置新的 levelsset_codes(self, codes[, level, inplace, …])为 MultiIndex 设置新的 codessortlevel(self[, level, ascending, …])根据 level 进行排序droplevel(self[, level])删除指定的 levelswaplevel(self[, i, j])交换 level i 与 level i即交换外层索引与内层索引
【03x03】提取值
对于这种有多层索引的对象如果只传入一个参数则会对外层索引进行提取其中包含对应所有的内层索引如果传入两个参数则第一个参数表示外层索引第二个参数表示内层索引示例如下 import pandas as pdimport numpy as npobj pd.Series(np.random.randn(12),index[[a, a, a, b, b, b, c, c, c, d, d, d], [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2]])obj
a 0 0.5502021 0.3287842 1.422690
b 0 -1.3334771 -0.9338092 -0.326541
c 0 0.6636861 0.9433932 0.273106
d 0 1.3540371 -2.3128472 -2.343777
dtype: float64obj[b]
0 -1.333477
1 -0.933809
2 -0.326541
dtype: float64obj[b, 1]
-0.9338094811708413obj[:, 2]
a 1.422690
b -0.326541
c 0.273106
d -2.343777
dtype: float64【03x04】交换分层与排序
MultiIndex 对象的 swaplevel() 方法可以交换外层与内层索引sortlevel() 方法会先对外层索引进行排序再对内层索引进行排序默认是升序如果设置 ascending 参数为 False 则会降序排列示例如下 import pandas as pdimport numpy as npobj pd.Series(np.random.randn(12),index[[a, a, a, b, b, b, c, c, c, d, d, d], [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2]])obj
a 0 -0.1102151 0.1930752 -1.101706
b 0 -1.3257431 0.5284182 -0.127081
c 0 -0.7338221 1.6652622 0.127073
d 0 1.2620221 -1.1705182 0.966334
dtype: float64obj.swaplevel()
0 a -0.110215
1 a 0.193075
2 a -1.101706
0 b -1.325743
1 b 0.528418
2 b -0.127081
0 c -0.733822
1 c 1.665262
2 c 0.127073
0 d 1.262022
1 d -1.170518
2 d 0.966334
dtype: float64obj.swaplevel().index.sortlevel()
(MultiIndex([(0, a),(0, b),(0, c),(0, d),(1, a),(1, b),(1, c),(1, d),(2, a),(2, b),(2, c),(2, d)],), array([ 0, 3, 6, 9, 1, 4, 7, 10, 2, 5, 8, 11], dtypeint32))这里是一段防爬虫文本请读者忽略。
本文原创首发于 CSDN作者 TRHX。
博客首页https://itrhx.blog.csdn.net/
本文链接https://itrhx.blog.csdn.net/article/details/106758103
未经授权禁止转载恶意转载后果自负尊重原创远离剽窃