实验三 pandas的基本使用
1.实验内容
(1)pandas的导入。
(2)创建Series对象和DataFrame数据表。
(3)DataFrame数据表索引与切片。
(4)DataFrame数据表添加删除行列的操作。
(5)DataFrame数据表的排序、排名、分组和合并操作。
(6)DataFrame数据表的分类数据的转换和赋值及缺失值的处理。
2.目的要求
(1)学会pandas的导入。
(2)掌握Series和DataFrae数据表的创建。
(3)掌握DataFrame数据表索引与切片方法。
(4)掌握DataFrame添加删除行列的操作。
(5)掌握DataFrame数据表的排序、排名、分组和合并操作。
(6)掌握DataFrame数据表的分类数据的转换和赋值及缺失值的处理方法。
3.实验方法手段及其条件
(1)编写程序完成Series和DataFrame对象的基本创建。
① 根据列表[2, 8, -5, 6, 7]创建Series对象s1并显示。
import pandas as pd
import numpy as np
s1=pd.Series([2, 8, -5, 6, 7])
s1
0 2
1 8
2 -5
3 6
4 7
dtype: int64
② 为列表[2, 8, -5, 6, 7]指定索引值[‘d’, ‘b’, ‘a’, ‘c’, ‘e’], 创建Series对象s2,显示s2并使用index和values属性查看s2索引名和值。
s2=pd.Series([2, 8, -5, 6, 7],index=['d', 'b', 'a', 'c', 'e'])
s2
d 2
b 8
a -5
c 6
e 7
dtype: int64
s2.index
Index(['d', 'b', 'a', 'c', 'e'], dtype='object')
s2.values
array([ 2, 8, -5, 6, 7], dtype=int64)
③ 字典对象data定义如下:
data = {‘name’: [‘zs’,‘ls’,‘ww’,‘zl’,‘lq’],‘age’: [23,24,22,25,21],‘ht’: [1.6,1.7,1.65,1.82,1.72]}
使用字典对象data创建DataFrame对象member,行索引值为[‘101’,‘102’,‘103’,‘104’, ‘105’]。member输出结果如下所示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zZ1Qv6FQ-1669126612795)(experiment-03-three–pic/%E5%9B%BE%E7%89%87%201.png)]
要求:显示member并使用columns、index和values属性查看member的列索引名、行索引名和值。
data = {'name': ['zs','ls','ww','zl','lq'],
'age': [23,24,22,25,21],
'ht': [1.6,1.7,1.65,1.82,1.72]
}
member=pd.DataFrame(data)
member.index=['101','102','103','104', '105']
member
name | age | ht | |
---|---|---|---|
101 | zs | 23 | 1.60 |
102 | ls | 24 | 1.70 |
103 | ww | 22 | 1.65 |
104 | zl | 25 | 1.82 |
105 | lq | 21 | 1.72 |
member.columns#查看列
Index(['name', 'age', 'ht'], dtype='object')
member.index#查看行
Index(['101', '102', '103', '104', '105'], dtype='object')
member.values #查看行
array([['zs', 23, 1.6],
['ls', 24, 1.7],
['ww', 22, 1.65],
['zl', 25, 1.82],
['lq', 21, 1.72]], dtype=object)
④ 根据numpy的ndarray对象np1创建DataFrame对象d2并显示d2。
np1=np.arange(10).reshape(5,2)
import numpy as np
np1=np.arange(10).reshape(5,2)
print(np1)
d2=pd.DataFrame(np1)
d2
[[0 1]
[2 3]
[4 5]
[6 7]
[8 9]]
0 | 1 | |
---|---|---|
0 | 0 | 1 |
1 | 2 | 3 |
2 | 4 | 5 |
3 | 6 | 7 |
4 | 8 | 9 |
(2)编写程序完成DataFrame数据表对象member的索引与切片的操作。
① 使用列表列名索引方法查看“name”列的内容,输出结果如下所示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lC2C77UL-1669126612796)(experiment-03-three–pic/%E5%9B%BE%E7%89%87%202.png)]
member.name
101 zs
102 ls
103 ww
104 zl
105 lq
Name: name, dtype: object
member['name']
101 zs
102 ls
103 ww
104 zl
105 lq
Name: name, dtype: object
② 使用列表列名索引方法查看“name”和“age”列的内容,输出结果如下所示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zPhVFh71-1669126612796)(experiment-03-three–pic/%E5%9B%BE%E7%89%87%203.png)]
member[['name','age']]
name | age | |
---|---|---|
101 | zs | 23 |
102 | ls | 24 |
103 | ww | 22 |
104 | zl | 25 |
105 | lq | 21 |
③ 使用索引切片查看“101”至“103”行的内容,输出结果如下所示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-avF0Fujh-1669126612797)(experiment-03-three–pic/%E5%9B%BE%E7%89%87%204.png)]
member[:'103']
name | age | ht | |
---|---|---|---|
101 | zs | 23 | 1.60 |
102 | ls | 24 | 1.70 |
103 | ww | 22 | 1.65 |
④ 使用loc方法和iloc方法查看“101”和“103”行的内容,输出结果如下所示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZcNZmxLJ-1669126612797)(experiment-03-three–pic/%E5%9B%BE%E7%89%87%205.png)]
member.loc[['101','103']]
name | age | ht | |
---|---|---|---|
101 | zs | 23 | 1.60 |
103 | ww | 22 | 1.65 |
member.iloc[[0,2]]
name | age | ht | |
---|---|---|---|
101 | zs | 23 | 1.60 |
103 | ww | 22 | 1.65 |
⑤ 使用loc方法和iloc方法查看“102” 和“name”的内容,输出结果如下所示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b6avMxHD-1669126612797)(experiment-03-three–pic/%E5%9B%BE%E7%89%87%206.png)]
member.loc[['102'],['name']]
name | |
---|---|
102 | ls |
member.iloc[[1],[0]]
name | |
---|---|
102 | ls |
⑥ 使用loc方法和iloc方法查看“101”和“103”对应的“name”和“ht”的内容,输出结果如下所示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GOGntwJQ-1669126612798)(experiment-03-three–pic/%E5%9B%BE%E7%89%87%207.png)]
member.loc[['101','103'],['name','ht']]
name | ht | |
---|---|---|
101 | zs | 1.60 |
103 | ww | 1.65 |
member.iloc[[0,2],[0,2]]
name | ht | |
---|---|---|
101 | zs | 1.60 |
103 | ww | 1.65 |
(3)编写程序完成DataFrame数据表对象member的列/行添加删除操作。
① 追加列“wt”: [55, 60, 70, 68, 57]和“gender”: [‘f’,‘m’,‘f’,‘m’,‘m’],输出结果如下所示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6s4Ayed7-1669126612798)(experiment-03-three-pic/%E5%9B%BE%E7%89%87%208.png)]
member['wt']=[55, 60, 70, 68, 57]
member['gender']=['f','m','f','m','m']
member
name | age | ht | wt | gender | |
---|---|---|---|---|---|
101 | zs | 23 | 1.60 | 55 | f |
102 | ls | 24 | 1.70 | 60 | m |
103 | ww | 22 | 1.65 | 70 | f |
104 | zl | 25 | 1.82 | 68 | m |
105 | lq | 21 | 1.72 | 57 | m |
② 修改“wt”列名为“weight”。输出结果如下所示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RnM3WAAg-1669126612799)(experiment-03-three-pic/%E5%9B%BE%E7%89%87%209.png)]
member.rename(columns={'wt':'weight'},inplace=True)
member
name | age | ht | weight | gender | |
---|---|---|---|---|---|
101 | zs | 23 | 1.60 | 55 | f |
102 | ls | 24 | 1.70 | 60 | m |
103 | ww | 22 | 1.65 | 70 | f |
104 | zl | 25 | 1.82 | 68 | m |
105 | lq | 21 | 1.72 | 57 | m |
③ 删除列“gender”。 输出结果如下所示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-McQZqCf1-1669126612799)(experiment-03-three-pic/%E5%9B%BE%E7%89%87%2010.png)]
del member['gender']
member
name | age | ht | weight | |
---|---|---|---|---|
101 | zs | 23 | 1.60 | 55 |
102 | ls | 24 | 1.70 | 60 |
103 | ww | 22 | 1.65 | 70 |
104 | zl | 25 | 1.82 | 68 |
105 | lq | 21 | 1.72 | 57 |
(4)编写程序完成DataFrame数据表对象stu和scoresheet的排序、排名、分组和合并操作。
① 创建DataFrame数据表对象stu和scoresheet,如下所示。
str_stu={
'Class':[1,2,3,1,2,2,2],
'Major':['network ','network ','hardware','hardware','software ','hardware','hardware'],
'Name':['Zhang San','Li Si','Wang Laowu','Zhao Liu','Qian Qi','Sun Ba','Hu Jiu']
}
stu=pd.DataFrame(str_stu)
stu.index=[101,102,103,104, 105,106,107]
stu
Class | Major | Name | |
---|---|---|---|
101 | 1 | network | Zhang San |
102 | 2 | network | Li Si |
103 | 3 | hardware | Wang Laowu |
104 | 1 | hardware | Zhao Liu |
105 | 2 | software | Qian Qi |
106 | 2 | hardware | Sun Ba |
107 | 2 | hardware | Hu Jiu |
str_scoresheet={
'Name':['Zhang San','Li Si','Wang Laowu','Zhao Liu','Qian Qi','Sun Ba'],
'Score':[98,76,84,70,93,83],
'Subject':['Python','C++','Python','C++','Python','Java']
}
scoresheet=pd.DataFrame(str_scoresheet)
scoresheet.index=[101,102,103,104, 105,106]
scoresheet
Name | Score | Subject | |
---|---|---|---|
101 | Zhang San | 98 | Python |
102 | Li Si | 76 | C++ |
103 | Wang Laowu | 84 | Python |
104 | Zhao Liu | 70 | C++ |
105 | Qian Qi | 93 | Python |
106 | Sun Ba | 83 | Java |
② stu按‘Major’和‘Class’升序排列,scoresheet按‘Score’降序排列,输出结果如下所示。
inplace=True表示对原始DataFrame本身操作,因此不需要赋值操作,inplace=False相当于是对原始DataFrame的拷贝,之后的一些操作都是针对这个拷贝文件进行操作的,因此需要我们赋值给一个变量,保存操作后的结果。
stu.sort_values(by=['Major','Class'],axis=0,ascending=[True,True],inplace=True)
stu
Class | Major | Name | |
---|---|---|---|
104 | 1 | hardware | Zhao Liu |
106 | 2 | hardware | Sun Ba |
107 | 2 | hardware | Hu Jiu |
103 | 3 | hardware | Wang Laowu |
101 | 1 | network | Zhang San |
102 | 2 | network | Li Si |
105 | 2 | software | Qian Qi |
scoresheet.sort_values(by='Score',axis=0,ascending=False,inplace=True)
scoresheet
Name | Score | Subject | |
---|---|---|---|
101 | Zhang San | 98 | Python |
105 | Qian Qi | 93 | Python |
103 | Wang Laowu | 84 | Python |
106 | Sun Ba | 83 | Java |
102 | Li Si | 76 | C++ |
104 | Zhao Liu | 70 | C++ |
③ scoresheet中修改‘zhao Liu’和‘Qian Qi’的‘Score’值为98,并返回学生的‘Score’降序排名,排名相同时取最小排名,输出结果如下所示。
scoresheet.iloc[1,1]=98
scoresheet.iloc[5,1]=98
scoresheet.sort_index()
Name | Score | Subject | |
---|---|---|---|
101 | Zhang San | 98 | Python |
102 | Li Si | 76 | C++ |
103 | Wang Laowu | 84 | Python |
104 | Zhao Liu | 98 | C++ |
105 | Qian Qi | 98 | Python |
106 | Sun Ba | 83 | Java |
scoresheet.sort_values(by=['Score']).rank(method="min",ascending=False).sort_index()
Name | Score | Subject | |
---|---|---|---|
101 | 2.0 | 1.0 | 1.0 |
102 | 6.0 | 6.0 | 5.0 |
103 | 3.0 | 4.0 | 1.0 |
104 | 1.0 | 1.0 | 5.0 |
105 | 5.0 | 1.0 | 1.0 |
106 | 4.0 | 5.0 | 4.0 |
④ scoresheet按‘Subject’分组,查看‘Python’分组信息,并对三门课程的‘Score’进行描述统计分析,输出结果如下所示。
scoresheet.groupby('Subject').get_group('Python')
Name | Score | Subject | |
---|---|---|---|
101 | Zhang San | 98 | Python |
105 | Qian Qi | 98 | Python |
103 | Wang Laowu | 84 | Python |
scoresheet.groupby('Subject').describe()
Score | ||||||||
---|---|---|---|---|---|---|---|---|
count | mean | std | min | 25% | 50% | 75% | max | |
Subject | ||||||||
C++ | 2.0 | 87.000000 | 15.556349 | 76.0 | 81.5 | 87.0 | 92.5 | 98.0 |
Java | 1.0 | 83.000000 | NaN | 83.0 | 83.0 | 83.0 | 83.0 | 83.0 |
Python | 3.0 | 93.333333 | 8.082904 | 84.0 | 91.0 | 98.0 | 98.0 | 98.0 |
⑤ 使用concat函数将stu和scorsheet横向合并,输出结果如下所示。
pd.concat([stu,scoresheet],axis=1).sort_index()
Class | Major | Name | Name | Score | Subject | |
---|---|---|---|---|---|---|
101 | 1 | network | Zhang San | Zhang San | 98.0 | Python |
102 | 2 | network | Li Si | Li Si | 76.0 | C++ |
103 | 3 | hardware | Wang Laowu | Wang Laowu | 84.0 | Python |
104 | 1 | hardware | Zhao Liu | Zhao Liu | 98.0 | C++ |
105 | 2 | software | Qian Qi | Qian Qi | 98.0 | Python |
106 | 2 | hardware | Sun Ba | Sun Ba | 83.0 | Java |
107 | 2 | hardware | Hu Jiu | NaN | NaN | NaN |
⑥ 使用merge函数将stu和scoresheet按‘Name’关键字合并,输出结果如下所示。
pd.merge(stu.sort_index(),scoresheet.sort_index(),on='Name')
Class | Major | Name | Score | Subject | |
---|---|---|---|---|---|
0 | 1 | network | Zhang San | 98 | Python |
1 | 2 | network | Li Si | 76 | C++ |
2 | 3 | hardware | Wang Laowu | 84 | Python |
3 | 1 | hardware | Zhao Liu | 98 | C++ |
4 | 2 | software | Qian Qi | 98 | Python |
5 | 2 | hardware | Sun Ba | 83 | Java |
(5)编写程序完成DataFrame数据表对象stu和scoresheet的分类数据和缺失数据操作。
① 设置DataFrame数据表对象stu的“Class”列为category类型数据,
追加列“Class_name”其对应“Class”列的值:1-17物联网1班、2-17物联网2班、3-17物联网3班,输出结果如下所示。
stu['Class'].astype('category')
101 1
102 2
103 3
104 1
105 2
106 2
107 2
Name: Class, dtype: category
Categories (3, int64): [1, 2, 3]
Class_name = pd.DataFrame({'Class':[1,2,3],
'Class_name':['17物联网1班','17物联网2班','17物联网3班']},
index=[101,102,103],dtype='category')
stu_Class_name = pd.merge(stu,Class_name,on='Class',how='left',indicator=False,validate=None)
stu_Class_name.index=[101,102,103,104, 105,106,107]
stu_Class_name
Class | Major | Name | Class_name | |
---|---|---|---|---|
101 | 1 | network | Zhang San | 17物联网1班 |
102 | 2 | network | Li Si | 17物联网2班 |
103 | 3 | hardware | Wang Laowu | 17物联网3班 |
104 | 1 | hardware | Zhao Liu | 17物联网1班 |
105 | 2 | software | Qian Qi | 17物联网2班 |
106 | 2 | hardware | Sun Ba | 17物联网2班 |
107 | 2 | hardware | Hu Jiu | 17物联网2班 |
② 按照“Class_name”排序,要求排序顺序为: ‘17物联网2班’,‘17物联网3班’,‘17物联网1班’,输出结果如下所示。
stu_Class_name['Class_name'] = stu_Class_name['Class_name'].cat.set_categories(['17物联网2班','17物联网3班','17物联网1班'])
stu_Class_name_1 = stu_Class_name.sort_values(by=['Class_name'], ascending=True)
stu_Class_name_1
Class | Major | Name | Class_name | |
---|---|---|---|---|
102 | 2 | network | Li Si | 17物联网2班 |
105 | 2 | software | Qian Qi | 17物联网2班 |
106 | 2 | hardware | Sun Ba | 17物联网2班 |
107 | 2 | hardware | Hu Jiu | 17物联网2班 |
103 | 3 | hardware | Wang Laowu | 17物联网3班 |
101 | 1 | network | Zhang San | 17物联网1班 |
104 | 1 | hardware | Zhao Liu | 17物联网1班 |
③ scoresheet中修改‘Zhao Liu’和‘Qian Qi’的‘Score’值为缺失值,并使用线性插值法填充该缺失值,输出结果如下所示。
scoresheet.iloc[3,1]=None
scoresheet.iloc[4,1]=None
scoresheet.interpolate().sort_index()
Name | Score | Subject | |
---|---|---|---|
101 | Zhang San | 98.000000 | Python |
102 | Li Si | 76.000000 | C++ |
103 | Wang Laowu | 84.000000 | Python |
104 | Zhao Liu | 83.666667 | C++ |
105 | Qian Qi | 83.333333 | Python |
106 | Sun Ba | 83.000000 | Java |
原文地址:https://blog.csdn.net/weixin_56950033/article/details/127991230
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_32348.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!