pandas模块的使用详解
为什么学习pandas
- numpy已经可以帮助我们进行数据的处理了,那么学习pandas的目的是什么呢?
- numpy能够帮助我们处理的是数值型的数据,当然在数据分析中除了数值型的数据还有好多其他类型的数据(字符串,时间序列),那么pandas就可以帮我们很好的处理除了数值型的其他数据!
什么是pandas?
- 首先先来认识pandas中的两个常用的类
- Series
- DataFrame
Series
Series是一种类似与一维数组的对象,由下面两个部分组成:
- values:一组数据(ndarray类型)
- index:相关的数据索引标签
Series的创建
- 由列表或numpy数组创建
- 由字典创建
import pandas as pd
from pandas import Series,DataFrame
import numpy as np
#Series这个数据结构中存储的数据一定得是一个维度
s1 = Series(data=[1,2,3,4,5])
# 结果如下
0 1
1 2
2 3
3 4
4 5
dtype: int64
s2 = Series(data=np.random.randint(0,100,size=(4,)))
# 结果如下
0 54
1 90
2 21
3 92
dtype: int32
# 创建一个字典
dic = {
'a':1,
'b':2,
'c':3
}
#Series的索引可以为字符串
s3 = Series(data=dic)
# 结果如下
a 1
b 2
c 3
dtype: int64
#index指定显式索引
s4 = Series(data=[1,2,3],index=['数学','英语','理综'])
# 结果如下
数学 1
英语 2
理综 3
dtype: int64
Series的索引
- 隐式索引:数值型
- 显式所用:自定义(字符串)
- 提高数据的可读性
Series的索引和切片
#索引操作
s4[0]
s4['数学']
s4.数学
# 值为
1
#切片
s4[0:2]
# 结果:
数学 1
英语 2
dtype: int64
s4["英语":'语文']
# 结果:
英语 2
语文 3
dtype: int64
- Series的常用属性
- shape --------- 查看维度
- size --------- 查看长度
- index --------- 查看所有的索引
- values --------- 查看所有的值
s4.shape
(3,)
s4.size
3
s4.index
Index(['数学', '英语', '语文'], dtype='object')
s4.values
array([1, 2, 3], dtype=int64)
- Series的常用方法
- head(),tail()
- unique()
- isnull(),notnull()
- add() sub() mul() div()
s4.head(2) #显式前n条数据
s4.tail(2) #显式后n条数据
英语 2
理综 3
dtype: int64
s = Series(data=[1,1,2,2,3,4,5,6,6,6,6,6,6,7,8])
s.unique() #对Series进行去重
array([1, 2, 3, 4, 5, 6, 7, 8], dtype=int64)
- Series的算术运算
s + s
s.add(s)
0 2
1 2
2 4
3 4
4 6
5 8
6 10
7 12
8 12
9 12
10 12
11 12
12 12
13 14
14 16
dtype: int64
- 算数运算的法则:
- 索引与之匹配的值进行算数运算,否则补空
s1 = Series(data=[1,2,3,4])
s2 = Series(data=[5,6,7])
s1 + s2
# 结果:
0 6.0
1 8.0
2 10.0
3 NaN
dtype: float64
- 清洗Series中的空值
s1 = Series(data=[1,2,3,4],index=['a','b','c','e'])
s2 = Series(data=[1,2,3,4],index=['a','d','c','f'])
s = s1 + s2
a 2.0
b NaN
c 6.0
d NaN
e NaN
f NaN
dtype: float64
#boolean可以作为索引取值
s1[[True,False,True,False]]
a 1
c 3
dtype: int64
#把s的NAN进行了清洗
s[[True,False,True,False,False,False]]
a 2.0
c 6.0
dtype: float64
- 将符合清洗要求的布尔值获取
s = s1 + s2
a 2.0
b NaN
c 6.0
d NaN
e NaN
f NaN
dtype: float64
s.isnull()
a False
b True
c False
d True
e True
f True
dtype: bool
s.notnull()
a True
b False
c True
d False
e False
f False
dtype: bool
#NAN的清洗
s[s.notnull()]
a 2.0
c 6.0
dtype: float64
DataFrame
DataFrame是一个【表格型】的数据结构。DataFrame由按一定顺序排列的多列数据组成。设计初衷是将Series的使用场景从一维拓展到多维。DataFrame既有行索引,也有列索引。
- 行索引:index
- 列索引:columns
- 值:values
DataFrame的创建
- ndarray创建
- 字典创建
df = DataFrame(data=np.random.randint(0,100,size=(5,6)))
| 0 | 1 | 2 | 3 | 4 | 5 | |
|---|---|---|---|---|---|---|
| 0 | 65 | 84 | 20 | 21 | 82 | 75 |
| 1 | 92 | 72 | 65 | 88 | 30 | 25 |
| 2 | 40 | 7 | 28 | 6 | 56 | 70 |
| 3 | 20 | 77 | 55 | 54 | 87 | 11 |
| 4 | 89 | 95 | 50 | 22 | 55 | 93 |
dic = {
'name':['tom','jay','bobo'],
'salary':[10000,15000,10000]
}
df = DataFrame(data=dic,index=['a','b','c'])
| name | salary | |
|---|---|---|
| a | tom | 10000 |
| b | jay | 15000 |
| c | bobo | 10000 |
- DataFrame的属性
- values、columns、index、shape
df.values # 查看全部的值
df.shape # 查看结构
df.index # 查看列索引
df.columns # 查看行索引
Index(['name', 'salary'], dtype='object')
============================================
练习4:
根据以下考试成绩表,创建一个DataFrame,命名为df:
张三 李四
语文 150 0
数学 150 0
英语 150 0
理综 300 0
dic = {
"张三":[150,150,150,300],
"李四":[0,0,0,0]
}
df = DataFrame(data=dic,index=["语文","英语","数学","理综"])
============================================
- DataFrame索引操作
- 对行进行索引
- 队列进行索引
- 对元素进行索引
| name | salary | |
|---|---|---|
| a | tom | 10000 |
| b | jay | 15000 |
| c | bobo | 10000 |
#索引取单列
df['name']
a tom
b jay
c bobo
Name: name, dtype: object
#索引取多列
df[['salary','name']]
| salary | name | |
|---|---|---|
| a | 10000 | tom |
| b | 15000 | jay |
| c | 10000 | bobo |
#取单行
df.loc['a']
df.iloc[0]
name tom
salary 10000
Name: a, dtype: object
#取多行
df.loc[['a','c']]
df.iloc[[0,2]]
| name | salary | |
|---|---|---|
| a | tom | 10000 |
| c | bobo | 10000 |
df
| name | salary | |
|---|---|---|
| a | tom | 10000 |
| b | jay | 15000 |
| c | bobo | 10000 |
#取单个元素之
df.iloc[1,1]
df.loc['b','salary']
15000
#取多个元素值
df.loc[['b','c'],'salary']
df.iloc[[1,2],1]
b 15000
c 10000
Name: salary, dtype: int64
- DataFrame的切片操作
- 对行进行切片
- 对列进行切片
df
| name | salary | |
|---|---|---|
| a | tom | 10000 |
| b | jay | 15000 |
| c | bobo | 10000 |
#切行
df[0:2]
| name | salary | |
|---|---|---|
| a | tom | 10000 |
| b | jay | 15000 |
#切列
df.iloc[:,0:2]
| name | salary | |
|---|---|---|
| a | tom | 10000 |
| b | jay | 15000 |
============================================
练习:
假设ddd是期中考试成绩,ddd2是期末考试成绩,请自由创建ddd2,并将其与ddd相加,求期中期末平均值。
dic = {
"ddd":[10,20,30],
"dd2":[50,60,50]
} df = DataFrame(data=dic,index=['a','b','c'])
df.mean(axis=1)
假设张三期中考试数学被发现作弊,要记为0分,如何实现?
dic = {
"张三":[10,20,30],
} df = DataFrame(data=dic,index=['语文','英语','数学'])
df
df.loc["数学"] = 0 df
李四因为举报张三作弊立功,期中考试所有科目加100分,如何实现?
dic = {
"李四":[10,20,30],
} df = DataFrame(data=dic,index=['语文','英语','数学'])
df
df['李四'] += 100
df
后来老师发现有一道题出错了,为了安抚学生情绪,给每位学生每个科目都加10分,如何实现?
dic = {
"李四":[10,20,30],
"张三":[10,20,0]
} df = DataFrame(data=dic,index=['语文','英语','数学'])
df += 10
============================================
- 时间数据类型的转换
- pd.to_datetime(col)
- 将某一列设置为行索引
- df.set_index()
dic = {
'time':['2019-01-09','2011-11-11','2018-09-22'],
'salary':[1111,2222,3333]
}
df = DataFrame(data=dic)
| salary | time | |
|---|---|---|
| 0 | 1111 | 2019-01-09 |
| 1 | 2222 | 2011-11-11 |
| 2 | 3333 | 2018-09-22 |
#查看df的数据的数据类型
df.dtypes
salary int64
time object
dtype: object
#将time列转换成时间序列类型
df['time'] = pd.to_datetime(df['time'])
| salary | time | |
|---|---|---|
| 0 | 1111 | 2019-01-09 |
| 1 | 2222 | 2011-11-11 |
| 2 | 3333 | 2018-09-22 |
df.dtypes
# 结果
salary int64
time datetime64[ns]
dtype: object
#将time这一列作为原数据的行索引
df.set_index(df['time'],inplace=True)
df.drop(labels='time',axis=1,inplace=True) #drop函数中axis的0行,1列
| salary | |
|---|---|
| time | |
| 2019-01-09 | 1111 |
| 2011-11-11 | 2222 |
| 2018-09-22 | 3333 |
pandas模块的使用详解的更多相关文章
- angular-ngSanitize模块-$sanitize服务详解
本篇主要讲解angular中的$sanitize这个服务.此服务依赖于ngSanitize模块. 要学习这个服务,先要了解另一个指令: ng-bing-html. 顾名思义,ng-bind-html和 ...
- angular-ngSanitize模块-linky过滤器详解
本篇主要讲解angular中的linky这个过滤器.此过滤器依赖于ngSanitize模块. linky能找出文本中的链接,然后把它转换成html链接.什么意思,就是说,一段文本里有一个链接,但是这个 ...
- python中argparse模块用法实例详解
python中argparse模块用法实例详解 这篇文章主要介绍了python中argparse模块用法,以实例形式较为详细的分析了argparse模块解析命令行参数的使用技巧,需要的朋友可以参考下 ...
- Python模块调用方式详解
Python模块调用方式详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其 ...
- Nginx RTMP 模块 nginx-rtmp-module 指令详解
译序:截至 Jul 8th,2013 官方公布的最新 Nginx RTMP 模块 nginx-rtmp-module 指令详解.指令Corertmp语法:rtmp { ... }上下文:根描述:保存所 ...
- Python中random模块生成随机数详解
Python中random模块生成随机数详解 本文给大家汇总了一下在Python中random模块中最常用的生成随机数的方法,有需要的小伙伴可以参考下 Python中的random模块用于生成随机数. ...
- webRTC中语音降噪模块ANS细节详解(二)
上篇(webRTC中语音降噪模块ANS细节详解(一))讲了维纳滤波的基本原理.本篇先给出webRTC中ANS的基本处理过程,然后讲其中两步(即时域转频域和频域转时域)中的一些处理细节. ANS的基本处 ...
- webRTC中语音降噪模块ANS细节详解(三)
上篇(webRTC中语音降噪模块ANS细节详解(二))讲了ANS的处理流程和语音在时域和频域的相互转换.本篇开始讲语音降噪的核心部分,首先讲噪声的初始估计以及基于估计出来的噪声算先验信噪比和后验信噪比 ...
- webRTC中语音降噪模块ANS细节详解(四)
上篇(webRTC中语音降噪模块ANS细节详解(三))讲了噪声的初始估计方法以及怎么算先验SNR和后验SNR. 本篇开始讲基于带噪语音和特征的语音和噪声的概率计算方法和噪声估计更新以及基于维纳滤波的降 ...
随机推荐
- xss未看完的文章
https://blog.csdn.net/fen0707/article/details/8596888 XSS介绍与攻击 http://xss.fbisb.com/w ...
- 检验实时3D像素流送平台好坏的七个标准!(上)
将交互式3D像素流送技术作为有价值的企业工具之后,就该寻找像素流送服务供应商了.问题在于交互式3D像素流送是一种新兴技术,因此很难知道要问供应商的正确问题.在开始使用之前,这里有7个问题,您应该从候选 ...
- 【Tomcat】Tomcat服务器核心配置说明及标签
目录 一,主要标签结构 二,Server标签 标签属性: 子标签: 三,Service 标签 子标签: 四,Executor 标签 属性: 五,Connector标签 属性: 六,Engine标签 属 ...
- 采购订单写入sap失败后,抛出自定义异常,回滚数据库
@Transactional(rollbackFor = Exception.class) @Override public Map<String,Object> getOderInfo( ...
- vue3系列:vue3.0自定义弹框组件V3Popup|vue3.x手机端弹框组件
基于Vue3.0开发的轻量级手机端弹框组件V3Popup. 之前有分享一个vue2.x移动端弹框组件,今天给大家带来的是Vue3实现自定义弹框组件. V3Popup 基于vue3.x实现的移动端弹出框 ...
- mysql数据库的连接以及增删改查Java代码实现(转载)
每天叫醒自己的不是闹钟,而是梦想 数据库: create table t1(id int primary key not null auto_increment,name varchar(32),pa ...
- MySQL索引优化,explain详细讲解
前言:这篇文章主要讲 explain 如何使用,还有 explain 各种参数概念,之后会讲优化 一.Explain 用法 模拟Mysql优化器是如何执行SQL查询语句的,从而知道Mysql是如何处理 ...
- hive on spark:return code 30041 Failed to create Spark client for Spark session原因分析及解决方案探寻
最近在Hive中使用Spark引擎进行执行时(set hive.execution.engine=spark),经常遇到return code 30041的报错,为了深入探究其原因,阅读了官方issu ...
- 微信小程序项目转换为uni-app项目
一.它是谁? [miniprogram-to-uniapp]转换微信小程序"项目为uni-app项目.原则上混淆过的项目,也可以进转换,因为关键字丢失,不一定会完美. 二.它的原理是什么? ...
- Ocelot一个优秀的.NET API网关框架
1 什么是Ocelot? Ocelot是一个用.NET Core实现并且开源的API网关,它功能强大,包括了:路由.请求聚合.服务发现.认证.鉴权.限流熔断.并内置了负载均衡器与Service Fab ...