实验三 pandas的基本使用

实验三 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

② 修改“wt”列名为“weight”。输出结果如下所示。

member.rename(columns={'wt':'weight'},inplace=True)
member

③ 删除列“gender”。 输出结果如下所示。

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()

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
乘风的头像乘风管理团队
上一篇 2023年11月14日
下一篇 2023年11月14日

相关推荐