资源描述
pandas 3:DataFrame常用函数
表4.2.3 DataFrame 常用函数函数
一、 计算
功能:对DataFrame进行计算
①已知DataFrame代码如下:
代码
结果
import pandas as pd
data ={"姓名":["王静怡","张佳妮","李臣武"],
"性别":["女","女","男"],
"借阅次数":[28,58,37]}
df1=pd.DataFrame(data,columns=["姓名","性别","借阅次数"])
print(df1)
姓名 性别 借阅次数
0 王静怡 女 28
1 张佳妮 女 58
2 李臣武 男 37
②axis=0或空表示列,axis=1表示行。
③在执行例7、例9、例10、例11、例15、例19时,TypeError警告并自动忽略掉错误类型的数据。
函数
序号
代码
运行结果
说明
count()
例1
print(df1.count())
姓名 3
性别 3
借阅次数 3
dtype: int64
空参数表示列
例2
print(df1.count(axis=0))
姓名 3
性别 3
借阅次数 3
dtype: int64
axis=0表示列
例3
print(df1.count(axis=1))
0 3
1 3
2 3
dtype: int64
axis=1表示行
例4
print(df1["姓名"].count( ))
3
索引计数
等价于print(df1.姓名.count( ))
sum()
例5
print(df1.sum())
姓名 王静怡张佳妮李臣武
性别 女女男
借阅次数 123
dtype: object
空参数表示列
例6
print(df1.sum(axis=0))
姓名 王静怡张佳妮李臣武
性别 女女男
借阅次数 123
dtype: object
axis=0表示列
例7
print(df1.sum(axis=1))
0 28
1 58
2 37
dtype: int64
axis=1表示行
TypeError警告
例8
print(df1["借阅次数"].sum())
123
索引求和
等价于print(df1.借阅次数.sum())
mean( )
例9
print(df1.mean())
借阅次数 41.0
dtype: float64
空参数表示列
TypeError警告
例10
print(df1.mean(axis=0))
借阅次数 41.0
dtype: float64
axis=0表示列
TypeError警告
例11
print(df1.mean(axis=1))
0 28.0
1 58.0
2 37.0
dtype: float64
axis=1表示行
TypeError警告
例12
print(df1["借阅次数"].mean())
41.0
索引求平均
等价于print(df1.借阅次数.mean())
max( )
例13
print(df1.max())
姓名 王静怡
性别 男
借阅次数 58
dtype: object
空参数表示列
例14
print(df1.max(axis=0))
姓名 王静怡
性别 男
借阅次数 58
dtype: object
axis=0表示列
例15
print(df1.max(axis=1))
0 28
1 58
2 37
dtype: int64
axis=1表示行
TypeError警告
例16
print(df1["借阅次数"].max())
58
索引求最大
等价于print(df1.借阅次数.max())
min( )
例17
print(df1.min())
姓名 张佳妮
性别 女
借阅次数 28
dtype: object
空参数表示列
例18
print(df1.min(axis=0))
姓名 张佳妮
性别 女
借阅次数 28
dtype: object
axis=0表示列
例19
print(df1.min(axis=1))
0 28
1 58
2 37
dtype: int64
axis=1表示行
TypeError警告
例20
print(df1["借阅次数"].min())
28
索引求最小
等价于print(df1.借阅次数.min())
二、 查看信息
1. describe( )函数:
功能:使用describe( )函数对DataFrame进行查看信息
序号
代码
运行结果
说明
例1
import pandas as pd
data ={
"借阅次数":[28,58,37],
"年龄":[17,15,16]
}
df1=pd.DataFrame(data)
print(df1)
print("——我是分割线——")
print(df1.describe())
借阅次数 年龄
0 28 17
1 58 15
2 37 16
——我是分割线——
借阅次数 年龄
count 3.000000 3.0
mean 41.000000 16.0
std 15.394804 1.0
min 28.000000 15.0
25% 32.500000 15.5
50% 37.000000 16.0
75% 47.500000 16.5
max 58.000000 17.0
可计算的数据
例2
import pandas as pd
data ={
"姓名":["王静怡","张佳妮","李臣武"],
"性别":["女","女","男"]
}
df2=pd.DataFrame(data)
print(df2)
print("——我是分割线——")
print(df2.describe())
姓名 性别
0 王静怡 女
1 张佳妮 女
2 李臣武 男
——我是分割线——
姓名 性别
count 3 3
unique 3 2
top 王静怡 女
freq 1 2
不可计算的数据
例3
import pandas as pd
data ={
"姓名":["王静怡","张佳妮","李臣武"],
"性别":["女","女","男"],
"借阅次数":[28,58,37],
"年龄":[17,15,16]
}
df3=pd.DataFrame(data)
print(df3)
print("——我是分割线——")
print(df3.describe())
姓名 性别 借阅次数 年龄
0 王静怡 女 28 17
1 张佳妮 女 58 15
2 李臣武 男 37 16
——我是分割线——
借阅次数 年龄
count 3.000000 3.0
mean 41.000000 16.0
std 15.394804 1.0
min 28.000000 15.0
25% 32.500000 15.5
50% 37.000000 16.0
75% 47.500000 16.5
max 58.000000 17.0
混合
例4
import pandas as pd
data ={
"姓名":["王静怡","张佳妮","李臣武"],
"性别":["女","女","男"],
"借阅次数":[28,58,37],
"年龄":[17,15,16]
}
df4=pd.DataFrame(data)
print(df4)
print("——我是分割线——")
print(df4.年龄.describe())
姓名 年龄
0 王静怡 17
1 张佳妮 15
2 李臣武 16
——我是分割线——
count 3.0
mean 16.0
std 1.0
min 15.0
25% 15.5
50% 16.0
75% 16.5
max 17.0
Name: 年龄, dtype: float64
索引
2.head()函数:
功能:使用head()函数对DataFrame进行查看信息
序号
代码
运行结果
说明
例1
import pandas as pd
data ={
"借阅次数":[28,58,37],
"年龄":[17,15,16]
}
df1=pd.DataFrame(data)
print(df1)
print("——我是分割线——")
print(df1.describe())
借阅次数 年龄
0 28 17
1 58 15
2 37 16
——我是分割线——
借阅次数 年龄
count 3.000000 3.0
mean 41.000000 16.0
std 15.394804 1.0
min 28.000000 15.0
25% 32.500000 15.5
50% 37.000000 16.0
75% 47.500000 16.5
max 58.000000 17.0
可计算数据
例2
import pandas as pd
data ={
"姓名":["王静怡","张佳妮","李臣武"],
"性别":["女","女","男"]
}
df2=pd.DataFrame(data)
print(df2)
print("——我是分割线——")
print(df2.describe())
姓名 性别
0 王静怡 女
1 张佳妮 女
2 李臣武 男
——我是分割线——
姓名 性别
count 3 3
unique 3 2
top 王静怡 女
freq 1 2
不可计算数据
例3
import pandas as pd
data ={
"姓名":["王静怡","张佳妮","李臣武"],
"性别":["女","女","男"],
"借阅次数":[28,58,37],
"年龄":[17,15,16]
}
df3=pd.DataFrame(data)
print(df3)
print("——我是分割线——")
print(df3.describe())
姓名 性别 借阅次数 年龄
0 王静怡 女 28 17
1 张佳妮 女 58 15
2 李臣武 男 37 16
——我是分割线——
借阅次数 年龄
count 3.000000 3.0
mean 41.000000 16.0
std 15.394804 1.0
min 28.000000 15.0
25% 32.500000 15.5
50% 37.000000 16.0
75% 47.500000 16.5
max 58.000000 17.0
混合
例4
import pandas as pd
data ={
"姓名":["王静怡","张佳妮","李臣武"],
"性别":["女","女","男"],
"借阅次数":[28,58,37],
"年龄":[17,15,16]
}
df4=pd.DataFrame(data)
print(df4)
print("——我是分割线——")
print(df4.年龄.describe())
姓名 年龄
0 王静怡 17
1 张佳妮 15
2 李臣武 16
——我是分割线——
count 3.0
mean 16.0
std 1.0
min 15.0
25% 15.5
50% 16.0
75% 16.5
max 17.0
Name: 年龄, dtype: float64
索引
例5
import pandas as pd
data ={
"姓名":["刘一","陈二","张三","李四","王五","赵六","孙七"],
"年龄":[11,22,33,44,55,66,77]
}
df5=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 刘一 11
1 陈二 22
2 张三 33
3 李四 44
4 王五 55
5 赵六 66
6 孙七 77
——以上是df5——
姓名 年龄
0 刘一 11
1 陈二 22
2 张三 33
3 李四 44
4 王五 55
——以上是df5.head()——
姓名 年龄
0 刘一 11
1 陈二 22
2 张三 33
——以上是df5.head(3)——
姓名 年龄
0 刘一 11
1 陈二 22
2 张三 33
3 李四 44
——以上是df5.head(-3)——
0 刘一
1 陈二
2 张三
3 李四
Name: 姓名, dtype: object
——以上是df5.姓名.head(-3)——
df5[0:5]
例6
import pandas as pd
data ={
"姓名":["刘一","陈二","张三","李四","王五","赵六","孙七"],
"年龄":[11,22,33,44,55,66,77]
}
df6=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 刘一 11
1 陈二 22
2 张三 33
3 李四 44
4 王五 55
5 赵六 66
6 孙七 77
——以上是df6——
姓名 年龄
2 张三 33
3 李四 44
4 王五 55
5 赵六 66
6 孙七 77
——以上是df6.tail()——
姓名 年龄
4 王五 55
5 赵六 66
6 孙七 77
——以上是df6.tail(3)——
姓名 年龄
3 李四 44
4 王五 55
5 赵六 66
6 孙七 77
——以上是df6.tail(-3)——
3 李四
4 王五
5 赵六
6 孙七
Name: 姓名, dtype: object
——以上是df6.姓名.tail(-3)——
3.tail()函数:
功能:对DataFrame进行查看信息
功能:使用tail()函数对DataFrame进行查看信息
序号
代码
运行结果
说明
例1
import pandas as pd
data ={
"借阅次数":[28,58,37],
"年龄":[17,15,16]
}
df1=pd.DataFrame(data)
print(df1)
print("——我是分割线——")
print(df1.describe())
借阅次数 年龄
0 28 17
1 58 15
2 37 16
——我是分割线——
借阅次数 年龄
count 3.000000 3.0
mean 41.000000 16.0
std 15.394804 1.0
min 28.000000 15.0
25% 32.500000 15.5
50% 37.000000 16.0
75% 47.500000 16.5
max 58.000000 17.0
可计算数据
例2
import pandas as pd
data ={
"姓名":["王静怡","张佳妮","李臣武"],
"性别":["女","女","男"]
}
df2=pd.DataFrame(data)
print(df2)
print("——我是分割线——")
print(df2.describe())
姓名 性别
0 王静怡 女
1 张佳妮 女
2 李臣武 男
——我是分割线——
姓名 性别
count 3 3
unique 3 2
top 王静怡 女
freq 1 2
不可计算数据
例3
import pandas as pd
data ={
"姓名":["王静怡","张佳妮","李臣武"],
"性别":["女","女","男"],
"借阅次数":[28,58,37],
"年龄":[17,15,16]
}
df3=pd.DataFrame(data)
print(df3)
print("——我是分割线——")
print(df3.describe())
姓名 性别 借阅次数 年龄
0 王静怡 女 28 17
1 张佳妮 女 58 15
2 李臣武 男 37 16
——我是分割线——
借阅次数 年龄
count 3.000000 3.0
mean 41.000000 16.0
std 15.394804 1.0
min 28.000000 15.0
25% 32.500000 15.5
50% 37.000000 16.0
75% 47.500000 16.5
max 58.000000 17.0
混合
例4
import pandas as pd
data ={
"姓名":["王静怡","张佳妮","李臣武"],
"性别":["女","女","男"],
"借阅次数":[28,58,37],
"年龄":[17,15,16]
}
df4=pd.DataFrame(data)
print(df4)
print("——我是分割线——")
print(df4.年龄.describe())
姓名 年龄
0 王静怡 17
1 张佳妮 15
2 李臣武 16
——我是分割线——
count 3.0
mean 16.0
std 1.0
min 15.0
25% 15.5
50% 16.0
75% 16.5
max 17.0
Name: 年龄, dtype: float64
索引
例5
import pandas as pd
data ={
"姓名":["刘一","陈二","张三","李四","王五","赵六","孙七"],
"年龄":[11,22,33,44,55,66,77]
}
df5=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 刘一 11
1 陈二 22
2 张三 33
3 李四 44
4 王五 55
5 赵六 66
6 孙七 77
——以上是df5——
姓名 年龄
0 刘一 11
1 陈二 22
2 张三 33
3 李四 44
4 王五 55
——以上是df5.head()——
姓名 年龄
0 刘一 11
1 陈二 22
2 张三 33
——以上是df5.head(3)——
姓名 年龄
0 刘一 11
1 陈二 22
2 张三 33
3 李四 44
——以上是df5.head(-3)——
0 刘一
1 陈二
2 张三
3 李四
Name: 姓名, dtype: object
——以上是df5.姓名.head(-3)——
等价于
df5[0:7]
等价于
df5[0:5]
等价于
df5[0:3]
等价于
df5[0:4]
等价于
df5["姓名"][0:4]
也等价于
df5.姓名[0:4]
例6
import pandas as pd
data ={
"姓名":["刘一","陈二","张三","李四","王五","赵六","孙七"],
"年龄":[11,22,33,44,55,66,77]}
df6=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 刘一 11
1 陈二 22
2 张三 33
3 李四 44
4 王五 55
5 赵六 66
6 孙七 77
——以上是df6——
姓名 年龄
2 张三 33
3 李四 44
4 王五 55
5 赵六 66
6 孙七 77
——以上是df6.tail()——
姓名 年龄
4 王五 55
5 赵六 66
6 孙七 77
——以上是df6.tail(3)——
姓名 年龄
3 李四 44
4 王五 55
5 赵六 66
6 孙七 77
——以上是df6.tail(-3)——
3 李四
4 王五
5 赵六
6 孙七
Name: 姓名, dtype: object
——以上是df6.姓名.tail(-3)——
等价于
df6[0:7]
等价于
df6[2:7]
等价于
df6[4:7]
等价于
df6[3:]
等价于
df6.姓名[3:]
三、 分组排序
1. 分组。数据分组是指,根据一个或多个键(函数、数组、df列名)将数据分成若干组,然后对分组后数据分别进行汇总计算,然后将计算结果进行合并。数据分组常使用groupby()函数。
1.1 groupby( )
功能:使用groupby( )函数对以上DataFrame进行分组
序号
代码
结果
说明
例1
import pandas as pd
data ={
"键":["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 3
B 3 3 3
C 3 3 3
——以上按键分组并计数——
数值 标记
键
A 12 2
B 18 1
C 15 2
——以上按键分组并求和——
数值 级别
键 标记
A 0 1 1
1 2 2
B 0 2 2
1 1 1
C 0 1 1
1 2 2
——以上按键、标记分组并计数——
数值
键 标记
A 0 7
1 5
B 0 9
1 9
C 0 2
1 13
——以上按键、标记分组并求和——
键
A 3
B 3
C 3
Name: 标记, dtype: int64
——以上按键分组,然后对标记计数
键
A 2
B 1
C 2
Name: 标记, dtype: int64
——以上按键分组,然后对标记求和
数值 标记 级别
键
A 3 3 3
B 3 3 3
C 3 3 3
——以上用series按键分组并计数
数值 标记
键
A 12 2
B 18 1
C 15 2
——以上用series按键分组并求和
按
列
分
组
例2
import pandas as pd
data ={
"键":["A","B","C","A","B","C","A","B","C"],
"数值":[1,3,5,7,9,2,4,6,8]
}
df=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 1
1 B 3
2 C 5
3 A 7
4 B 9
5 C 2
6 A 4
7 B 6
8 C 8
——以上df——
数值
键
A 3
B 3
C 3
——以上使用as_index空参数——
数值
键
A 3
B 3
C 3
——以上使用as_index=True——
键 数值
0 A 3
1 B 3
2 C 3
——以上使用as_index=False——
设置as_index
2. 排序。DataFrame 对象中,按索引排序可以使用 sort _ index ()函数,按值排序可以使用 sort values ()函数。通过选项 axis =0/1确定排序的轴向,axis 默认值为0,纵向排序;通过选项 ascending = True / False 确定升/降序, ascending 默认值为 True ,升序排序。排序结果返回一个新 DataFrame 对象。
2.1 sort _ values( )函数
功能:用sort _ values( )函数对DataFrame进行排序
序号
代码
运行结果
说明
例3
import pandas as pd
data={
'列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 列2
0 A a
1 A B
2 B c
3 c D
4 D e
5 C F
——以上是df——
列1 列2
1 A B
3 c D
5 C F
0 A a
2 B c
4 D e
——以上是df.sort_values("列2")——
列1 列2
1 A B
3 c D
5 C F
0 A a
2 B c
4 D e
——以上是df.sort_values("列2",axis=0))——
列2 列1
0 a A
1 B A
2 c B
3 D c
4 e D
5 F C
——以上是df.sort_values(3,axis=1))
列1 列2
1 A B
3 c D
5 C F
0 A a
2 B c
4 D e
——以上是df.sort_values("列2",ascending=True))
列1 列2
展开阅读全文