本文介绍: (1)pandas导入。(2)创建Series对象和DataFrame数据表。(3)DataFrame数据表索引切片。(4)DataFrame数据表添加删除行列操作。(5)DataFrame数据表的排序、排名、分组合并操作。(6)DataFrame数据表的分类数据的转换赋值缺失值的处理

实验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并使用indexvalues属性查看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-threepic/%E5%9B%BE%E7%89%87%201.png)]
要求:显示member使用columns、indexvalues属性查看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)

④ 根据numpyndarray对象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-threepic/%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-threepic/%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-threepic/%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-threepic/%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-threepic/%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-threepic/%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数据表对象stuscoresheet排序、排名、分组和合并操作。

创建DataFrame数据表对象stuscoresheet,如下所示。

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进行投诉反馈,一经查实,立即删除!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注