3、pandas基础操作
1. pandas 介绍
1.1 为什么学习pandas
- numpy已经可以帮助我们进行数据的处理了,那么学习pandas的目的是什么呢?
- numpy能够帮助我们处理的是数值型的数据,当然在数据分析中除了数值型的数据还有好多其他类型的数据(字符串, 时间序列),那么pandas就可以帮我们很好的处理除了数值型的其他数据!
什么是pandas?
- 首先先来认识pandas中的两个常用的类
- Series
- Dataframe
2. Series 的简单使用
Series是一种类似与一维数组的对象,由下面两个部分组成:
- values:一组数据(ndarray类型)
- index:相关的数据索引标签
2.1 Series的创建方式
# 导入Series、pandas相关包
from pandas import Series
(1)由列表创建
s = Series(data=[1,2,3,'four'])
s
image.png
(2)由numpy数组创建
import numpy as np
s = Series(data=np.random.randint(0,100,size=(3,)))
s
image.png
(3)index 用来指定显示索引
s = Series(data=[1,2,3,'four'],index=['a','b','c','d'])
s
image.png
(4)使用字典创建
dic ={
'语文':80,
'数学':70,
'英语':60
}
s = Series(data=dic)
s
image.png
2.2 Series索引的作用
(1)显示索引可以增强Series的可读行
(2)Series的索引和切片
# 查看隐式索引为0的行数据
s[0]
image.png
# 查看显示索引为'语文'的行数据
s.语文
image.png
# 查看0到2行的行数据
s[0:2]
image.png
2.3 Series的常用属性
(1)shape 查看Series形状
image.png
(2)size 查看Series的大小
image.png
(3)index 返回Series索引
image.png
(4)values 返回Series值
image.png
(5)dtype 返回元素类型
image.png
2.4 Series的常用方法
创建一个样本
s = Series(data=np.random.randint(60,100,size=(10,)))
s
image.png
(1)head()显示前N个数组 ,默认是5个
s.head()
image.png
(2)tail() 显示后n个
s.tail(3) #显示后n个
image.png
(3)unique() 去重
s.unique() #去重
image.png
(4)isnull() 判断每一个元素是否为空
s.isnull() #判断每一个元素是否为空
image.png
(5)notnull() 判断每一个元素是否为非空
s.notnull() #判断每一个元素是否为非空
image.png
2.5 Series 的算术运算
索引一致的元素进行算术运算,否则为空
s1 = Series(data=[1,2,3],index=['a','b','c'])
s2 = Series(data=[1,2,3],index=['a','d','c'])
s = s1 + s2
s
image.png
3. DataFrane的简单使用
Dataframe是一个【表格型】的数据结构。Dataframe由按一定顺序排列的多列数据组成。设计初衷是将Series的使用场景从—维拓展到多维。Dataframe既有行索引,也有列索引。
- 行索引 :index
- 列索引: columns值: values
3.1 Dataframe的创建
# 导入Dataframe 模块
from pandas import Dataframe
(1)ndarray创建
df = Dataframe(data=np.random.randint(0,100,size=(6,4)))
df
image.png
(2)字典创建
dic ={
'name':['a','d','c'],
'age':[11,12,13]
}
df = Dataframe(data=dic,index=['a','b','c'])
df
image.png
3.2 Dataframe 的属性
(1)values 查看Dataframe 的值
df.values
image.png
(2)columns 查看Dataframe 的列索引
df.columns
image.png
(3)index 查看Dataframe 的行索引
df.index
image.png
(4)shape 查看Dataframe的形状
df.shape
image.png
3.3 练习
根据以下考试成绩表,创建一个Dataframe,命名为df:
张三 | 李四 | |
---|---|---|
语文 | 150 | 50 |
数学 | 150 | 50 |
英语 | 150 | 50 |
理综 | 150 | 50 |
dic ={
'张三': [150,150,150,300],
'李四': [0,0,0,0]
}
s = Dataframe(data=dic,index=['语文','数学','英语','理综'])
s
image.png
3.4 Dataframe索引操作
创建样本
df = Dataframe(data=np.random.randint(60,100,size=(8,4)),columns=['a','b','c','d'])
df
image.png
(1)对列进行索引取值
df['a'] #取单列,如果df有显示的索引,通过索引机制取行或者列的时候只可以使用显示索引
image.png
(2)取多列
df[['a','c']] #取多列
image.png
(3)iloc:通过隐式索引取行
#取单行
df.iloc[0]
image.png
# 取单列
df.iloc[:,0]
image.png
#取多行
df.iloc[[0,3,5]]
image.png
#取多列
df.iloc[:,[0,2,3]]
image.png
#取第0行第三列的数据
df.iloc[0,3]
image.png
#取多个元素
df.loc[[1,3,5],'c']
image.png
(4)loc:通过显示索引取行
#取单行
df.loc[:,'a']
image.png
#取多列
df.loc[:,['a','b']]
image.png
# 取多个元素
df.loc[[1,3,5],'c']
image.png
3.5 Dataframe的切片操作
(1)对行进行切片
df[0:3]
image.png
(2)对列进行切片
df.iloc[:,0:2]
image.png
(3)对行和列进行切片
df.iloc[0:2,0:2]
image.png
3. 6 总结:
- df 索引和切片操作
- 索引:
- df[col]:取列
- df.loc[index]:取列,显示索引
- df.iloc[index]:取列,隐式索引
- df.iloc[index,col]:取元素,隐式索引
- 切片:
- df[index1,index2]:切行
- df.iloc[:,col1:col2]:切列
- 索引:
3.7 练习
要求:
1.假设ddd是期中考试成绩,ddd2是期末考试成绩,请自由创建ddd2,并将其与ddd相加,求期中期末平均值
2.假设张三期中考试数学被发现作弊,要记为0分,如何实现?
3.李四因为举报张三作弊立功,期中考试所有科目加100分,如何实现?
4.后来老师发现有一道题出错了,为了安抚学生情绪,给每位学生每个科目都加10分,如何实现?
(1)创建数据结构
dic1 ={
'张三':[100,100,100,100],
'李四':[80,80,80,80]
}
dic2 ={
'张三':[80,80,80,80],
'李四':[100,100,100,100]
}
#期中
ddd = Dataframe(data=dic1,index=['语文','数学','英语','理综'])
#期末
ddd2 = Dataframe(data=dic2,index=['语文','数学','英语','理综'])
(2)计算期中期末的平均值
#总分
count = ddd + ddd2
#平均值
ave = count / 2
image.png
(3)张三期中考试数学被发现作弊,要记为0分
#张三期中考试数学记为0分
ddd.loc['数学','张三']=0
ddd
image.png
(4)将李四所有成绩加100
#将李四所有成绩加100
ddd.loc[:,'李四']+=100 #ddd['李四'] += 100
ddd
image.png
(5)给所有学生每个科目加10分
#给所有学生每个科目加10分
ddd.loc[:]+=10 # ddd += 10
ddd
image.png
3.8 时间数据类型的转换
- pd.to_datetime(col) 时间数据类型的转换
(1)创建样本
import pandas as pd
dic = {
'time':['2021-9-8','2021-8-8','2021-7-8'],
'temp':[10,20,30]
}
df = Dataframe(data=dic)
df
image.png
(2)查看time列的类型
#查看time列的类型 字符串类型
df['time'].dtype
image.png
(3)将time列转为时间类型
df['time'] = pd.to_datetime(df['time'])
df
image.png
- 将time列作为原数据的行索引 inplace是否覆盖原df
df.set_index('time',inplace=True)
df
image.png