实验三 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
s1=pd.Series([2, 8, -5, 6, 7])
s1
② 为列表[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
#使用index和values属性查看s2索引名和值。
print(s2.index)
print(s2.values)
③ 字典对象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输出结果如下所示。
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,index=['101','102','103','104', '105'])
member=member[['name','age','ht']]
member
要求:显示member并使用columns、index和values属性查看member的列索引名、行索引名和值。
print(member.columns)
print(member.index)
print(member.values)
④ 根据numpy的ndarray对象np1创建DataFrame对象d2并显示d2。
np1=np.arange(10).reshape(5,2)
import numpy as np
np1=np.arange(10).reshape(5,2)
d2=pd.DataFrame(np1)
d2
(2)编写程序完成DataFrame数据表对象member的索引与切片的操作。
① 使用列表列名索引方法查看“name”列的内容,输出结果如下所示。
member['name']
使用列表列名索引方法查看“name”和“age”列的内容,输出结果如下所示。
member[['name','age']]
③ 使用索引切片查看“101”至“103”行的内容,输出结果如下所示。
member[:'103']
④ 使用loc方法和iloc方法查看“101”和“103”行的内容,输出结果如下所示。
member.loc[['101','103']]
member.iloc[[0,2]]
⑤ 使用loc方法和iloc方法查看“102” 和“name”的内容,输出结果如下所示。
member.loc[['102'],['name']]
member.iloc[[1],[0]]
⑥ 使用loc方法和iloc方法查看“101”和“103”对应的“name”和“ht”的内容,输出结果如下所示。
member.loc[['101','103'],['name','ht']]
member.iloc[[0,2],[0,2]]
(3)编写程序完成DataFrame数据表对象member的列/行添加删除操作。
① 追加列“wt”: [55, 60, 70, 68, 57]和“gender”: [‘f’,‘m’,‘f’,‘m’,‘m’],输出结果如下所示。
member['wt']=[55, 60, 70, 68, 57]
member['gender']= ['f','m','f','m','m']
member
member.rename(columns={'wt':'weight'},inplace=True)
member
del member['gender']
member
(4)编写程序完成DataFrame数据表对象stu和scoresheet的排序、排名、分组和合并操作。
① 创建DataFrame数据表对象stu和scoresheet,如下所示。
data1 = {'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(data1,index=['101','102','103','104', '105','106'])
scoresheet
data0 = {'Name': ['Zhang San','Li Si','Wang Laowu','Zhao Liu','Qian Qi','Sun Ba','Hu Jiu'],
'Major': ['network','network','hardware','hardware','software','hardware','hardware'],
'Class': [1,2,3,1,2,2,2]}
stu=pd.DataFrame(data0,index=['101','102','103','104', '105','106','107'])
stu
② stu按‘Major’和‘Class’升序排列,scoresheet按‘Score’降序排列,输出结果如下所示。
stu.sort_values(by=['Major','Class'],inplace=True)
stu
scoresheet.sort_values(by='Score',ascending=False)
③ scoresheet中修改‘zhao Liu’和‘Qian Qi’的‘Score’值为98,并返回学生的‘Score’降序排名,排名相同时取最小排名,输出结果如下所示。
scoresheet.iloc[3,1]=98
scoresheet.iloc[4,1]=98
scoresheet
scoresheet.sort_values(by=['Score']).rank(method='min',ascending=False).sort_index()
④ scoresheet按‘Subject’分组,查看‘Python’分组信息,并对三门课程的‘Score’进行描述统计分析,输出结果如下所示。
scoresheet.groupby('Subject').get_group('Python')
scoresheet.groupby('Subject').describe()
⑤ 使用concat函数将stu和scorsheet横向合并,输出结果如下所示。
pd.concat([stu,scoresheet],axis=1).sort_index()
⑥ 使用merge函数将stu和scoresheet按‘Name’关键字合并,输出结果如下所示。
pd.merge(stu.sort_index(),scoresheet.sort_index(),on='Name')
(5)编写程序完成DataFrame数据表对象stu和scoresheet的分类数据和缺失数据操作。
① 设置DataFrame数据表对象stu的“Class”列为category类型数据,追加列“Class_name”其对应“Class”列的值:1-17物联网1班、2-17物联网2班、3-17物联网3班,输出结果如下所示。
stu['Class'].astype('category')
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_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.sort_values(by=['Class_name'], ascending=True)
③ scoresheet中修改‘Zhao Liu’和‘Qian Qi’的‘Score’值为缺失值,并使用线性插值法填充该缺失值,输出结果如下所示。
scoresheet.iloc[3,1]=None
scoresheet.iloc[4,1]=None
scoresheet.interpolate().sort_index()
原文地址:https://blog.csdn.net/m0_56638797/article/details/128171211
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_23102.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!