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
![](https://img.haomeiwen.com/i28346185/d3e79dcab6b626ab.png)
(2)由numpy数组创建
import numpy as np
s = Series(data=np.random.randint(0,100,size=(3,)))
s
![](https://img.haomeiwen.com/i28346185/b1a03892a340d659.png)
(3)index 用来指定显示索引
s = Series(data=[1,2,3,'four'],index=['a','b','c','d'])
s
![](https://img.haomeiwen.com/i28346185/8640464ecc655a34.png)
(4)使用字典创建
dic ={
'语文':80,
'数学':70,
'英语':60
}
s = Series(data=dic)
s
![](https://img.haomeiwen.com/i28346185/41de63484df70230.png)
2.2 Series索引的作用
(1)显示索引可以增强Series的可读行
(2)Series的索引和切片
# 查看隐式索引为0的行数据
s[0]
![](https://img.haomeiwen.com/i28346185/d07d1760f0f6beba.png)
# 查看显示索引为'语文'的行数据
s.语文
![](https://img.haomeiwen.com/i28346185/27f8349ecdaf08fd.png)
# 查看0到2行的行数据
s[0:2]
![](https://img.haomeiwen.com/i28346185/e02ab1584c8cafbc.png)
2.3 Series的常用属性
(1)shape 查看Series形状
![](https://img.haomeiwen.com/i28346185/98bbe7ae59d7ca3f.png)
(2)size 查看Series的大小
![](https://img.haomeiwen.com/i28346185/b8c1db79450bae05.png)
(3)index 返回Series索引
![](https://img.haomeiwen.com/i28346185/054dc6bad16a0ccf.png)
(4)values 返回Series值
![](https://img.haomeiwen.com/i28346185/16c111fc82b2b3c1.png)
(5)dtype 返回元素类型
![](https://img.haomeiwen.com/i28346185/52e133a4b35e52aa.png)
2.4 Series的常用方法
创建一个样本
s = Series(data=np.random.randint(60,100,size=(10,)))
s
![](https://img.haomeiwen.com/i28346185/910e47f1b14003fc.png)
(1)head()显示前N个数组 ,默认是5个
s.head()
![](https://img.haomeiwen.com/i28346185/8462621028451199.png)
(2)tail() 显示后n个
s.tail(3) #显示后n个
![](https://img.haomeiwen.com/i28346185/5aaf34eb2fa6f120.png)
(3)unique() 去重
s.unique() #去重
![](https://img.haomeiwen.com/i28346185/e664793efd331909.png)
(4)isnull() 判断每一个元素是否为空
s.isnull() #判断每一个元素是否为空
![](https://img.haomeiwen.com/i28346185/b847e68e6fce2a6c.png)
(5)notnull() 判断每一个元素是否为非空
s.notnull() #判断每一个元素是否为非空
![](https://img.haomeiwen.com/i28346185/0aa0e72f0473a744.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
![](https://img.haomeiwen.com/i28346185/80778c27b0b8227b.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
![](https://img.haomeiwen.com/i28346185/9aa7688d320407be.png)
(2)字典创建
dic ={
'name':['a','d','c'],
'age':[11,12,13]
}
df = DataFrame(data=dic,index=['a','b','c'])
df
![](https://img.haomeiwen.com/i28346185/45d12ac5292c2f35.png)
3.2 DataFrame 的属性
(1)values 查看DataFrame 的值
df.values
![](https://img.haomeiwen.com/i28346185/e8e07c5b2f264908.png)
(2)columns 查看DataFrame 的列索引
df.columns
![](https://img.haomeiwen.com/i28346185/063d9b9a81059f56.png)
(3)index 查看DataFrame 的行索引
df.index
![](https://img.haomeiwen.com/i28346185/19acc803c2f18ffb.png)
(4)shape 查看DataFrame的形状
df.shape
![](https://img.haomeiwen.com/i28346185/a940a0144f76d6b3.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
![](https://img.haomeiwen.com/i28346185/fbe8cda438559a44.png)
3.4 DataFrame索引操作
创建样本
df = DataFrame(data=np.random.randint(60,100,size=(8,4)),columns=['a','b','c','d'])
df
![](https://img.haomeiwen.com/i28346185/c7ffc729b86069d7.png)
(1)对列进行索引取值
df['a'] #取单列,如果df有显示的索引,通过索引机制取行或者列的时候只可以使用显示索引
![](https://img.haomeiwen.com/i28346185/2df57f72010462a5.png)
(2)取多列
df[['a','c']] #取多列
![](https://img.haomeiwen.com/i28346185/ec1e85cce1f9a6c7.png)
(3)iloc:通过隐式索引取行
#取单行
df.iloc[0]
![](https://img.haomeiwen.com/i28346185/0fdeecf632fa890e.png)
# 取单列
df.iloc[:,0]
![](https://img.haomeiwen.com/i28346185/064ac4a9fc7c0e14.png)
#取多行
df.iloc[[0,3,5]]
![](https://img.haomeiwen.com/i28346185/0c4ba79a6452ca17.png)
#取多列
df.iloc[:,[0,2,3]]
![](https://img.haomeiwen.com/i28346185/b7ebfb904f2892d7.png)
#取第0行第三列的数据
df.iloc[0,3]
![](https://img.haomeiwen.com/i28346185/d544f639505534ed.png)
#取多个元素
df.loc[[1,3,5],'c']
![](https://img.haomeiwen.com/i28346185/3fdd5b0b6749c532.png)
(4)loc:通过显示索引取行
#取单行
df.loc[:,'a']
![](https://img.haomeiwen.com/i28346185/4df124414a7c396f.png)
#取多列
df.loc[:,['a','b']]
![](https://img.haomeiwen.com/i28346185/7523abc8182f87c1.png)
# 取多个元素
df.loc[[1,3,5],'c']
![](https://img.haomeiwen.com/i28346185/3a0270f8e79d1432.png)
3.5 DataFrame的切片操作
(1)对行进行切片
df[0:3]
![](https://img.haomeiwen.com/i28346185/5e68ca461614e310.png)
(2)对列进行切片
df.iloc[:,0:2]
![](https://img.haomeiwen.com/i28346185/d2b9a99ca600b458.png)
(3)对行和列进行切片
df.iloc[0:2,0:2]
![](https://img.haomeiwen.com/i28346185/28ac9deccce1203c.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
![](https://img.haomeiwen.com/i28346185/16bc0e374c415b3f.png)
(3)张三期中考试数学被发现作弊,要记为0分
#张三期中考试数学记为0分
ddd.loc['数学','张三']=0
ddd
![](https://img.haomeiwen.com/i28346185/80cfe7f26475c829.png)
(4)将李四所有成绩加100
#将李四所有成绩加100
ddd.loc[:,'李四']+=100 #ddd['李四'] += 100
ddd
![](https://img.haomeiwen.com/i28346185/6f128ddcdf88e194.png)
(5)给所有学生每个科目加10分
#给所有学生每个科目加10分
ddd.loc[:]+=10 # ddd += 10
ddd
![](https://img.haomeiwen.com/i28346185/05bd179202f705e0.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
![](https://img.haomeiwen.com/i28346185/bb8709ecdf38b3af.png)
(2)查看time列的类型
#查看time列的类型 字符串类型
df['time'].dtype
![](https://img.haomeiwen.com/i28346185/8283d4aadf52020d.png)
(3)将time列转为时间类型
df['time'] = pd.to_datetime(df['time'])
df
![](https://img.haomeiwen.com/i28346185/de8de6f690f36e99.png)
- 将time列作为原数据的行索引 inplace是否覆盖原df
df.set_index('time',inplace=True)
df
![](https://img.haomeiwen.com/i28346185/3dc7e55ab71b88d3.png)
网友评论