1.Series对象
(1)定义和创建
(2)数据访问
(3)常用方法
(1)定义和创建
Series 对象是一种带有标签数据的一维数组,标示签在Pandas中有对应的数据类型“Index”,Series类似于一维数组与字典的结合。
In [1]:
#导入库
import pandas as pd #导入数据分析库pandas 别名为pd
import numpy as np #导入科学计算库numpy 别名为np
import matplotlib.pyplot as plt #导入数据可视化库matplotlib的模块pylot 别名为plt
In [2]:
data = pd.Series([6,8,3,4,32],index = [ 'a','b','c','d','e']) #创建对象data,默认标签序号为0,1,2...,但也可以自己定义
data
data = pd.Series([6,8,3,4,32],index = list('dfghe')) #将字符串强行转换成列表
data
Out[2]:
d 6
f 8
g 3
h 4
e 32
dtype: int64
In [3]:
data.index #访问标签,属性后面没有小括号
Out[3]:
Index(['d', 'f', 'g', 'h', 'e'], dtype='object')
In [4]:
data.values #访问对象数据
Out[4]:
array([ 6, 8, 3, 4, 32], dtype=int64)
In [5]:
data.ndim #维度
Out[5]:
1
In [6]:
data.shape #Series对象的形状,返回的是元祖
Out[6]:
(5,)
In [7]:
data.size #Series对象的个数
Out[7]:
5
In [8]:
names = ['aa','cc','dd','bb','ee']
ages = [56,45,89,32,65]
pd.Series(ages,names)
data = pd.Series({'aa':56,'cc':45,'dd':89,'bb':32,'ee':65}) #用字典{}"键值对"创建Series对象
print(data) #打印对象内容
print(data) #内容输出shuju,将被后面数据覆盖
aa 56
cc 45
dd 89
bb 32
ee 65
dtype: int64
aa 56
cc 45
dd 89
bb 32
ee 65
dtype: int64
In [9]:
data_1 = pd.Series(np.arange(10,30,5),index = list('abcd')) #用科学计算库生产数据创建Series对象
data_1
Out[9]:
a 10
b 15
c 20
d 25
dtype: int32
(2)数据访问
In [10]:
data_1.index
Out[10]:
Index(['a', 'b', 'c', 'd'], dtype='object')
In [11]:
data_1.values
Out[11]:
array([10, 15, 20, 25])
In [12]:
data_1.keys() #作为字典键keys()方法访问
Out[12]:
Index(['a', 'b', 'c', 'd'], dtype='object')
In [13]:
list(data_1.items()) #作为键值对items()方法访问
Out[13]:
[('a', 10), ('b', 15), ('c', 20), ('d', 25)]
(3)常用方法
In [14]:
data.sort_values() #根据对象数据排序
Out[14]:
bb 32
cc 45
aa 56
ee 65
dd 89
dtype: int64
In [15]:
data.sort_index() #根据对象标签排序
Out[15]:
aa 56
bb 32
cc 45
dd 89
ee 65
dtype: int64
In [16]:
data.rank() #根据对象数据排名
Out[16]:
aa 3.0
cc 2.0
dd 5.0
bb 1.0
ee 4.0
dtype: float64
In [17]:
data #原有对象不变
Out[17]:
aa 56
cc 45
dd 89
bb 32
ee 65
dtype: int64
In [18]:
data[2]
Out[18]:
89
2.DataFrame对象
(1)定义和创建
(2)数据访问
(3)常用方法
(4)常见操作
(1)定义和创建
DataFrame 可以看作是一种既有行索引,又有列索引的二维数组,类似于Excel表或关系型数据库中的二维表,是Pandas中最常用的基本结构。
In [19]:
names = ['aa','dd','ee','oo','ff']
ages = [45,87,65,32,54]
pd.Series(ages,names)
data_2 = pd.DataFrame({'姓名':names,'年龄':ages})
data_2
Out[19]:
姓名 年龄
0 aa 45
1 dd 87
2 ee 65
3 oo 32
4 ff 54
(2)数据访问
In [20]:
data_2[['姓名','年龄']] #根据列名访问
Out[20]:
姓名 年龄
0 aa 45
1 dd 87
2 ee 65
3 oo 32
4 ff 54
In [21]:
data_2.年龄
Out[21]:
0 45
1 87
2 65
3 32
4 54
Name: 年龄, dtype: int64
In [22]:
data_2.年龄>50 #根据属性表达式判断数据返回逻辑值
Out[22]:
0 False
1 True
2 True
3 False
4 True
Name: 年龄, dtype: bool
In [23]:
data_2['年龄'][3] #根据列名和标签访问具体数据
Out[23]:
32
In [24]:
data_2.loc[3,'姓名'] #根据列名显式索引访问
Out[24]:
'oo'
In [25]:
data_2.iloc[0:3,1:2] #根据序号隐式索引访问
Out[25]:
年龄
0 45
1 87
2 65
(3)常用方法
(4)常见操作
(1)Pandas中的缺失值处理
(2)Pandas中的分组操作
(3)Pandas中的数据合并操作
In [26]:
#导入库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
In [27]:
#1.使用Pandas读取两个表格数据,并将其根据姓名进行合并:
data_1 = pd.read_excel('../Stu_pack/pandas/exer_1.xlsx',skiprows = 1) #读取文件数据
data_2 = pd.read_excel('../Stu_pack/pandas/exer_2.xlsx',skiprows = 1)
#print(data_1) #打印数据
#print(data_2)
data_2
data_3 = pd.merge(data_1,data_2) #合并数据
data_3
#data_1.join(data_2.set_index('姓名'),on = '姓名') #用join()方法合并
Out[27]:
姓名 性别 班级 语文 数学 英语 总分
0 Aa 男 2班 83 78 98 259
1 Bb 男 3班 67 93 56 216
2 Cc 女 3班 59 86 86 231
3 Dd 男 3班 75 60 59 194
4 Ee 女 3班 81 81 79 241
5 Ff 女 1班 68 67 95 230
6 Gg 女 1班 61 80 75 216
7 Hh 女 1班 89 70 96 255
8 Ii 女 3班 62 55 90 207
9 Jj 男 3班 68 91 94 253
10 Kk 女 2班 86 77 51 214
11 Ll 男 1班 88 72 78 238
12 Mm 男 2班 85 91 59 235
13 Nn 男 3班 80 65 76 221
14 Oo 女 3班 70 96 68 234
15 Pp 男 1班 76 78 98 252
16 Qq 女 1班 78 68 67 213
17 Rr 女 1班 78 68 67 213
18 Ss 女 2班 77 51 90 218
19 Tt 男 3班 67 98 99 264
20 Uu 女 3班 68 67 78 213
21 Vv 女 3班 98 77 51 226
22 Ww 女 3班 77 51 89 217
23 Xx 男 1班 89 89 67 245
24 Yy 女 1班 77 51 56 184
25 Zz 男 2班 56 68 67 191
In [29]:
#2.实现按总分 或 语文、数学、英语单科从高到低排序功能:
def sort(df,col):
ss = df.sort_values(by = col,ascending = False) #根据某一列的值(从高到低)排序
return ss
col = input('请输入您要排序的列名:')
sort(data_3,col) #调用排序函数
请输入您要排序的列名:语文
Out[29]:
姓名 性别 班级 语文 数学 英语 总分
21 Vv 女 3班 98 77 51 226
23 Xx 男 1班 89 89 67 245
7 Hh 女 1班 89 70 96 255
11 Ll 男 1班 88 72 78 238
10 Kk 女 2班 86 77 51 214
12 Mm 男 2班 85 91 59 235
0 Aa 男 2班 83 78 98 259
4 Ee 女 3班 81 81 79 241
13 Nn 男 3班 80 65 76 221
17 Rr 女 1班 78 68 67 213
16 Qq 女 1班 78 68 67 213
18 Ss 女 2班 77 51 90 218
24 Yy 女 1班 77 51 56 184
22 Ww 女 3班 77 51 89 217
15 Pp 男 1班 76 78 98 252
3 Dd 男 3班 75 60 59 194
14 Oo 女 3班 70 96 68 234
20 Uu 女 3班 68 67 78 213
9 Jj 男 3班 68 91 94 253
5 Ff 女 1班 68 67 95 230
19 Tt 男 3班 67 98 99 264
1 Bb 男 3班 67 93 56 216
8 Ii 女 3班 62 55 90 207
6 Gg 女 1班 61 80 75 216
2 Cc 女 3班 59 86 86 231
25 Zz 男 2班 56 68 67 191
In [31]:
#3.打印所有存在不及格科目(单科<60)的学生记录:
data_2[(data_2['语文']<60) | (data_2['数学']<60) | (data_2['英语']<60)] #用列表名判断某一列有不及格的行数据
data_2[(data_2.语文<60) | (data_2.数学<60) | (data_2.英语<60)] #用属性索引判断某一列有不及格的行数据
Out[31]:
姓名 语文 数学 英语 总分
1 Bb 67 93 56 216
2 Cc 59 86 86 231
3 Dd 75 60 59 194
8 Ii 62 55 90 207
10 Kk 86 77 51 214
12 Mm 85 91 59 235
18 Ss 77 51 90 218
21 Vv 98 77 51 226
22 Ww 77 51 89 217
24 Yy 77 51 56 184
25 z 56 68 67 191