中小学pandas2(教师)公开课教案教学设计课件案例测试练习卷题.docx
pandas 3:DataFrame常用函数表4.2.3 DataFrame 常用函数函数一、 计算功能:对DataFrame进行计算已知DataFrame代码如下:代码结果import pandas as pddata ="姓名":"王静怡","张佳妮","李臣武","性别":"女","女","男","借阅次数":28,58,37df1=pd.DataFrame(data,columns="姓名","性别","借阅次数")print(df1) 姓名 性别 借阅次数0 王静怡 女 281 张佳妮 女 582 李臣武 男 37axis=0或空表示列,axis=1表示行。在执行例7、例9、例10、例11、例15、例19时,TypeError警告并自动忽略掉错误类型的数据。函数序号代码运行结果说明count()例1print(df1.count()姓名 3性别 3借阅次数 3dtype: int64空参数表示列例2print(df1.count(axis=0)姓名 3性别 3借阅次数 3dtype: int64axis=0表示列例3print(df1.count(axis=1)0 31 32 3dtype: int64axis=1表示行例4print(df1"姓名".count( )3索引计数等价于print(df1.姓名.count( )sum()例5print(df1.sum()姓名 王静怡张佳妮李臣武性别 女女男借阅次数 123dtype: object空参数表示列例6print(df1.sum(axis=0)姓名 王静怡张佳妮李臣武性别 女女男借阅次数 123dtype: objectaxis=0表示列例7print(df1.sum(axis=1)0 281 582 37dtype: int64axis=1表示行TypeError警告例8print(df1"借阅次数".sum()123索引求和等价于print(df1.借阅次数.sum()mean( )例9print(df1.mean()借阅次数 41.0dtype: float64空参数表示列TypeError警告例10print(df1.mean(axis=0)借阅次数 41.0dtype: float64axis=0表示列TypeError警告例11print(df1.mean(axis=1)0 28.01 58.02 37.0dtype: float64axis=1表示行TypeError警告例12print(df1"借阅次数".mean()41.0索引求平均等价于print(df1.借阅次数.mean()max( )例13print(df1.max()姓名 王静怡性别 男借阅次数 58dtype: object空参数表示列例14print(df1.max(axis=0)姓名 王静怡性别 男借阅次数 58dtype: objectaxis=0表示列例15print(df1.max(axis=1)0 281 582 37dtype: int64axis=1表示行TypeError警告例16print(df1"借阅次数".max()58索引求最大等价于print(df1.借阅次数.max()min( )例17print(df1.min()姓名 张佳妮性别 女借阅次数 28dtype: object空参数表示列例18print(df1.min(axis=0)姓名 张佳妮性别 女借阅次数 28dtype: objectaxis=0表示列例19print(df1.min(axis=1)0 281 582 37dtype: int64axis=1表示行TypeError警告例20print(df1"借阅次数".min()28索引求最小等价于print(df1.借阅次数.min()二、 查看信息1. describe( )函数:功能:使用describe( )函数对DataFrame进行查看信息序号代码运行结果说明例1import pandas as pddata ="借阅次数":28,58,37,"年龄":17,15,16df1=pd.DataFrame(data)print(df1)print("我是分割线")print(df1.describe() 借阅次数 年龄0 28 171 58 152 37 16我是分割线 借阅次数 年龄count 3.000000 3.0mean 41.000000 16.0std 15.394804 1.0min 28.000000 15.025% 32.500000 15.550% 37.000000 16.075% 47.500000 16.5max 58.000000 17.0可计算的数据例2import pandas as pddata ="姓名":"王静怡","张佳妮","李臣武","性别":"女","女","男"df2=pd.DataFrame(data)print(df2)print("我是分割线")print(df2.describe() 姓名 性别0 王静怡 女1 张佳妮 女2 李臣武 男我是分割线 姓名 性别count 3 3unique 3 2top 王静怡 女freq 1 2不可计算的数据例3import pandas as pddata ="姓名":"王静怡","张佳妮","李臣武","性别":"女","女","男","借阅次数":28,58,37,"年龄":17,15,16df3=pd.DataFrame(data)print(df3)print("我是分割线")print(df3.describe() 姓名 性别 借阅次数 年龄0 王静怡 女 28 171 张佳妮 女 58 152 李臣武 男 37 16我是分割线 借阅次数 年龄count 3.000000 3.0mean 41.000000 16.0std 15.394804 1.0min 28.000000 15.025% 32.500000 15.550% 37.000000 16.075% 47.500000 16.5max 58.000000 17.0混合例4import pandas as pddata ="姓名":"王静怡","张佳妮","李臣武","性别":"女","女","男","借阅次数":28,58,37,"年龄":17,15,16df4=pd.DataFrame(data)print(df4)print("我是分割线")print(df4.年龄.describe() 姓名 年龄0 王静怡 171 张佳妮 152 李臣武 16我是分割线count 3.0mean 16.0std 1.0min 15.025% 15.550% 16.075% 16.5max 17.0Name: 年龄, dtype: float64索引2.head()函数:功能:使用head()函数对DataFrame进行查看信息序号代码运行结果说明例1import pandas as pddata ="借阅次数":28,58,37,"年龄":17,15,16df1=pd.DataFrame(data)print(df1)print("我是分割线")print(df1.describe() 借阅次数 年龄0 28 171 58 152 37 16我是分割线 借阅次数 年龄count 3.000000 3.0mean 41.000000 16.0std 15.394804 1.0min 28.000000 15.025% 32.500000 15.550% 37.000000 16.075% 47.500000 16.5max 58.000000 17.0可计算数据例2import pandas as pddata ="姓名":"王静怡","张佳妮","李臣武","性别":"女","女","男"df2=pd.DataFrame(data)print(df2)print("我是分割线")print(df2.describe() 姓名 性别0 王静怡 女1 张佳妮 女2 李臣武 男我是分割线 姓名 性别count 3 3unique 3 2top 王静怡 女freq 1 2不可计算数据例3import pandas as pddata ="姓名":"王静怡","张佳妮","李臣武","性别":"女","女","男","借阅次数":28,58,37,"年龄":17,15,16df3=pd.DataFrame(data)print(df3)print("我是分割线")print(df3.describe() 姓名 性别 借阅次数 年龄0 王静怡 女 28 171 张佳妮 女 58 152 李臣武 男 37 16我是分割线 借阅次数 年龄count 3.000000 3.0mean 41.000000 16.0std 15.394804 1.0min 28.000000 15.025% 32.500000 15.550% 37.000000 16.075% 47.500000 16.5max 58.000000 17.0混合例4import pandas as pddata ="姓名":"王静怡","张佳妮","李臣武","性别":"女","女","男","借阅次数":28,58,37,"年龄":17,15,16df4=pd.DataFrame(data)print(df4)print("我是分割线")print(df4.年龄.describe() 姓名 年龄0 王静怡 171 张佳妮 152 李臣武 16我是分割线count 3.0mean 16.0std 1.0min 15.025% 15.550% 16.075% 16.5max 17.0Name: 年龄, dtype: float64索引例5import pandas as pddata ="姓名":"刘一","陈二","张三","李四","王五","赵六","孙七","年龄":11,22,33,44,55,66,77df5=pd.DataFrame(data)print(df5)print("以上是df5")print(df5.head()print("以上是df5.head()")print(df5.head(3)print("以上是df5.head(3)")print(df5.head(-3)print("以上是df5.head(-3)")print(df5.姓名.head(-3)print("以上是df5.姓名.head(-3)") 姓名 年龄0 刘一 111 陈二 222 张三 333 李四 444 王五 555 赵六 666 孙七 77以上是df5 姓名 年龄0 刘一 111 陈二 222 张三 333 李四 444 王五 55以上是df5.head() 姓名 年龄0 刘一 111 陈二 222 张三 33以上是df5.head(3) 姓名 年龄0 刘一 111 陈二 222 张三 333 李四 44以上是df5.head(-3)0 刘一1 陈二2 张三3 李四Name: 姓名, dtype: object以上是df5.姓名.head(-3)df50:5例6import pandas as pddata ="姓名":"刘一","陈二","张三","李四","王五","赵六","孙七","年龄":11,22,33,44,55,66,77df6=pd.DataFrame(data)print(df6)print("以上是df6")print(df6.tail()print("以上是df6.tail()")print(df6.tail(3)print("以上是df6.tail(3)")print(df6.tail(-3)print("以上是df6.tail(-3)")print(df6.姓名.tail(-3)print("以上是df6.姓名.tail(-3)") 姓名 年龄0 刘一 111 陈二 222 张三 333 李四 444 王五 555 赵六 666 孙七 77以上是df6 姓名 年龄2 张三 333 李四 444 王五 555 赵六 666 孙七 77以上是df6.tail() 姓名 年龄4 王五 555 赵六 666 孙七 77以上是df6.tail(3) 姓名 年龄3 李四 444 王五 555 赵六 666 孙七 77以上是df6.tail(-3)3 李四4 王五5 赵六6 孙七Name: 姓名, dtype: object以上是df6.姓名.tail(-3)3.tail()函数:功能:对DataFrame进行查看信息功能:使用tail()函数对DataFrame进行查看信息序号代码运行结果说明例1import pandas as pddata ="借阅次数":28,58,37,"年龄":17,15,16df1=pd.DataFrame(data)print(df1)print("我是分割线")print(df1.describe() 借阅次数 年龄0 28 171 58 152 37 16我是分割线 借阅次数 年龄count 3.000000 3.0mean 41.000000 16.0std 15.394804 1.0min 28.000000 15.025% 32.500000 15.550% 37.000000 16.075% 47.500000 16.5max 58.000000 17.0可计算数据例2import pandas as pddata ="姓名":"王静怡","张佳妮","李臣武","性别":"女","女","男"df2=pd.DataFrame(data)print(df2)print("我是分割线")print(df2.describe() 姓名 性别0 王静怡 女1 张佳妮 女2 李臣武 男我是分割线 姓名 性别count 3 3unique 3 2top 王静怡 女freq 1 2不可计算数据例3import pandas as pddata ="姓名":"王静怡","张佳妮","李臣武","性别":"女","女","男","借阅次数":28,58,37,"年龄":17,15,16df3=pd.DataFrame(data)print(df3)print("我是分割线")print(df3.describe() 姓名 性别 借阅次数 年龄0 王静怡 女 28 171 张佳妮 女 58 152 李臣武 男 37 16我是分割线 借阅次数 年龄count 3.000000 3.0mean 41.000000 16.0std 15.394804 1.0min 28.000000 15.025% 32.500000 15.550% 37.000000 16.075% 47.500000 16.5max 58.000000 17.0混合例4import pandas as pddata ="姓名":"王静怡","张佳妮","李臣武","性别":"女","女","男","借阅次数":28,58,37,"年龄":17,15,16df4=pd.DataFrame(data)print(df4)print("我是分割线")print(df4.年龄.describe() 姓名 年龄0 王静怡 171 张佳妮 152 李臣武 16我是分割线count 3.0mean 16.0std 1.0min 15.025% 15.550% 16.075% 16.5max 17.0Name: 年龄, dtype: float64索引例5import pandas as pddata ="姓名":"刘一","陈二","张三","李四","王五","赵六","孙七","年龄":11,22,33,44,55,66,77df5=pd.DataFrame(data)print(df5)print("以上是df5")print(df5.head()print("以上是df5.head()")print(df5.head(3)print("以上是df5.head(3)")print(df5.head(-3)print("以上是df5.head(-3)")print(df5.姓名.head(-3)print("以上是df5.姓名.head(-3)") 姓名 年龄0 刘一 111 陈二 222 张三 333 李四 444 王五 555 赵六 666 孙七 77以上是df5 姓名 年龄0 刘一 111 陈二 222 张三 333 李四 444 王五 55以上是df5.head() 姓名 年龄0 刘一 111 陈二 222 张三 33以上是df5.head(3) 姓名 年龄0 刘一 111 陈二 222 张三 333 李四 44以上是df5.head(-3)0 刘一1 陈二2 张三3 李四Name: 姓名, dtype: object以上是df5.姓名.head(-3)等价于df50:7等价于df50:5等价于df50:3等价于df50:4等价于df5"姓名"0:4也等价于df5.姓名0:4例6import pandas as pddata ="姓名":"刘一","陈二","张三","李四","王五","赵六","孙七","年龄":11,22,33,44,55,66,77df6=pd.DataFrame(data)print(df6)print("以上是df6")print(df6.tail()print("以上是df6.tail()")print(df6.tail(3)print("以上是df6.tail(3)")print(df6.tail(-3)print("以上是df6.tail(-3)")print(df6.姓名.tail(-3)print("以上是df6.姓名.tail(-3)") 姓名 年龄0 刘一 111 陈二 222 张三 333 李四 444 王五 555 赵六 666 孙七 77以上是df6 姓名 年龄2 张三 333 李四 444 王五 555 赵六 666 孙七 77以上是df6.tail() 姓名 年龄4 王五 555 赵六 666 孙七 77以上是df6.tail(3) 姓名 年龄3 李四 444 王五 555 赵六 666 孙七 77以上是df6.tail(-3)3 李四4 王五5 赵六6 孙七Name: 姓名, dtype: object以上是df6.姓名.tail(-3)等价于df60:7等价于df62:7等价于df64:7等价于df63:等价于df6.姓名3:三、 分组排序1. 分组。数据分组是指,根据一个或多个键(函数、数组、df列名)将数据分成若干组,然后对分组后数据分别进行汇总计算,然后将计算结果进行合并。数据分组常使用groupby()函数。1.1 groupby( )功能:使用groupby( )函数对以上DataFrame进行分组序号代码结果说明例1import pandas as pddata ="键":"A","B","C","A","B","C","A","B","C","数值":1,3,5,7,9,2,4,6,8,"标记":1,0,1,0,1,0,1,0,1,"级别":"优","及","优","良","良","优","优","优","良"df=pd.DataFrame(data)print(df)print("以上df")print(df.groupby("键").count()print("以上按键分组并计数")print(df.groupby("键").sum()print("以上按键分组并求和")print(df.groupby("键","标记").count()print("以上按键、标记分组并计数")print(df.groupby("键","标记").sum()print("以上按键、标记分组并求和")print(df.groupby("键")"标记".count()print("以上按键分组,然后对标记计数")print(df.groupby("键")"标记".sum()print("以上按键分组,然后对标记求和")print(df.groupby(df"键").count()print("以上用series按键分组并计数")print(df.groupby(df"键").sum()print("以上用series按键分组并求和") 键 数值 标记 级别0 A 1 1 优1 B 3 0 及2 C 5 1 优3 A 7 0 良4 B 9 1 良5 C 2 0 优6 A 4 1 优7 B 6 0 优8 C 8 1 良以上df 数值 标记 级别键 A 3 3 3B 3 3 3C 3 3 3以上按键分组并计数 数值 标记键 A 12 2B 18 1C 15 2以上按键分组并求和 数值 级别键 标记 A 0 1 1 1 2 2B 0 2 2 1 1 1C 0 1 1 1 2 2以上按键、标记分组并计数 数值键 标记 A 0 7 1 5B 0 9 1 9C 0 2 1 13以上按键、标记分组并求和键A 3B 3C 3Name: 标记, dtype: int64以上按键分组,然后对标记计数键A 2B 1C 2Name: 标记, dtype: int64以上按键分组,然后对标记求和 数值 标记 级别键 A 3 3 3B 3 3 3C 3 3 3以上用series按键分组并计数 数值 标记键 A 12 2B 18 1C 15 2以上用series按键分组并求和按列分组例2import pandas as pddata ="键":"A","B","C","A","B","C","A","B","C","数值":1,3,5,7,9,2,4,6,8df=pd.DataFrame(data)print(df)print("以上df")print(df.groupby("键").count()print("以上使用as_index空参数")print(df.groupby("键",as_index=True).count()print("以上使用as_index=True")print(df.groupby("键",as_index=False).count()print("以上使用as_index=False") 键 数值0 A 11 B 32 C 53 A 74 B 95 C 26 A 47 B 68 C 8以上df 数值键 A 3B 3C 3以上使用as_index空参数 数值键 A 3B 3C 3以上使用as_index=True 键 数值0 A 31 B 32 C 3以上使用as_index=False设置as_index2. 排序。DataFrame 对象中,按索引排序可以使用 sort _ index ()函数,按值排序可以使用 sort values ()函数。通过选项 axis =0/1确定排序的轴向,axis 默认值为0,纵向排序;通过选项 ascending = True / False 确定升/降序, ascending 默认值为 True ,升序排序。排序结果返回一个新 DataFrame 对象。2.1 sort _ values( )函数功能:用sort _ values( )函数对DataFrame进行排序序号代码运行结果说明例3import pandas as pddata= '列1': 'A', 'A', 'B', 'c','D', 'C', '列2': 'a', 'B', 'c', 'D', 'e', 'F'df = pd.DataFrame(data)print(df)print("以上是df")print(df.sort_values("列2")print("以上是df.sort_values("列2")")print(df.sort_values("列2",axis=0)print("以上是df.sort_values("列2",axis=0)")print(df.sort_values(3,axis=1)print("以上是df.sort_values(3,axis=1)")print(df.sort_values("列2",ascending=True)print("以上是df.sort_values("列2",ascending=True)")print(df.sort_values("列2",ascending=False)print("以上是df.sort_values("列2",ascending=False)")print(df)print("以上是df") 列1 列20 A a1 A B2 B c3 c D4 D e5 C F以上是df 列1 列21 A B3 c D5 C F0 A a2 B c4 D e以上是df.sort_values("列2") 列1 列21 A B3 c D5 C F0 A a2 B c4 D e以上是df.sort_values("列2",axis=0) 列2 列10 a A1 B A2 c B3 D c4 e D5 F C以上是df.sort_values(3,axis=1) 列1 列21 A B3 c D5 C F0 A a2 B c4 D e以上是df.sort_values("列2",ascending=True) 列1 列2