pandas -- 处理非数值型数据 -- 数据分析三剑客(核心)
开发环境
- anaconda
- 集成环境:集成好了数据分析和机器学习中所需要的全部环境
- 安装目录不可以有中文和特殊符号
- jupyter
- anaconda提供的一个基于浏览器的可视化开发工具
为什么学习pandas
- numpy已经可以帮助我们进行数据的处理了,那么学习pandas的目的是什么呢?
- numpy能够帮助我们处理的是数值型的数据,当然在数据分析中除了数值型的数据还有好多其他类型的数据(字符串,时间序列),那么pandas就可以帮我们很好的处理除了数值型的其他数据!
什么是pandas
首先先来认识pandas中的两个常用的类
- Series
- DataFrame
Series
Series的概述
- Series是一种类似与一维数组的对象,由下面两个部分组成:
- values:一组数据(ndarray类型)
- index:相关的数据索引标签
Series的创建
- 由列表或numpy数组创建
- 由字典创建
from pandas import Series
s = Series(data=[1,2,3,'four'])
s
0 1
1 2
2 3
3 four
dtype: object
import numpy as np
s = Series(data=np.random.randint(0,100,size=(3,)))
s
0 3
1 43
2 82
dtype: int64
# index用来指定显示索引
# 为什么需要有显示索引
# 显示索引可以增强Series的可读性
s = Series(data=[1,2,3,'four'],index=['a','b','c','d'])
s
a 1
b 2
c 3
d four
dtype: object
dic = {
'语文':100,
'数学':99,
'理综':250
}
s = Series(data=dic)
s
语文 100
数学 99
理综 250
dtype: int64
Series的索引和切片
s[0]
100
s.语文
100
s[0:2]
语文 100
数学 99
dtype: int64
Series的常用属性
- shape
- size
- index
- values
s.shape
(3,)
s.size
3
s.index # 返回索引
Index(['语文','数学','理综'], dtype='object')
s.values # 返回值
array([100, 99, 250])
s.dtype # 元素的类型
dtype('int64')
s = Series(data=[1,2,3,'four'],index=['a','b','c','d'])
s.dtype # 数据类型O表示的是Object(字符串类型)
dtype('O')
Series的常用方法
- head()
- tail()
- unique()
- isnull()
- notnull()
- add()
- sub()
- mul()
- div()
s = Series(data=np.random.randint(60,100,size=(10,)))
s
0 79
1 61
2 79
3 60
4 68
5 77
6 76
7 99
8 69
9 89
s.head(3) # 显示前n个数据
0 79
1 61
2 79
dtype: int64
s.tail(3) # 显示后n个元素
7 99
8 69
9 89
dtype: int64
s.unique() # 去重
array([79, 61, 60, 68, 77, 76, 99, 69, 89])
s.isnull() # 用于判断每一个元素是否为空,为空返回True,否则返回False
0 False
1 False
2 False
3 False
4 False
5 False
6 False
7 False
8 False
9 False
dtype: bool
s.notnull()
0 True
1 True
2 True
3 True
4 True
5 True
6 True
7 True
8 True
9 True
dtype: bool
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
a 2.0
b NaN
c 6.0
d NaN
dtype: float64
s.isnull()
a False
b True
c False
d True
dtype: bool
DataFrame(重点)
- DataFrame是一个【表格型】的数据结构。DataFrame由按一定顺序排列的多列数据组成。设计初衷是将Series的使用场景从一维拓展到多维。DataFrame既有行索引,也有列索引。
- 行索引:index
- 列索引:columns
- 值:values
DataFrame的创建
- ndarray创建
- 字典创建
from pandas import DataFrame
df = DataFrame(data=[[1,2,3],[4,5,6]])
df

df = DataFrame(data=np.random.randint(0,100,size=(6,4)))
df

dic = {
'name':['zhangsan','lisi','wanglaowu'],
'salary':[1000,2000,3000]
}
df = DataFrame(data=dic,index=['a','b','c'])
df

DataFrame的属性
- values
- columns
- index
- shape
df.values
array([['zhangsan', 1000],
['lisi', 2000],
['wanglaowu', 3000]], dtype=object)
df.columns
Index(['name', 'salary'], dtype='object')
df.index
Index(['a', 'b', 'c'], dtype='object')
df.shape
(3, 2)
============================================
根据以下考试成绩表,创建一个DataFrame,命名为df:
张三 李四
语文 150 0
数学 150 0
英语 150 0
理综 300 0
============================================
dic = {
'张三':[150,150,150,150],
'李四':[0,0,0,0]
}
df = DataFrame(data=dic,index=['语文','数学','英语','理综'])
df

DataFrame的索引和切片操作
- 索引
- df[col]:取列
- df.loc[index]:取行
- df.iloc[index,col]:取元素
- 切片
- df[index1:index3]:切行
- df.iloc[:,col1:col3]:切列
DataFrame索引操作
- 对行进行索引
- 对列进行索引
- 对元素进行索引
df = DataFrame(data=np.random.randint(60,100,size=(8,4)),columns=['a','b','c','d'])
df

df['a'] # 取单列,如果df有显示的索引,通过索引机制取行或者取列的时候只可以使用显示索引
0 95
1 76
2 69
3 74
4 75
5 67
6 95
7 72
Name: a, dtype: int64
df[['a','c']] #取多列

iloc: 通过隐式索引取行
loc: 通过显示索引取行
# 取单行
df.loc[0]
a 95
b 87
c 83
d 68
Name: 0, dtype: int64
# 取多行
df.iloc[[0,3,5]]

# 取单个元素
df.iloc[0,2]
83
df.loc[0,'a']
95
# 取多个元素
df.iloc[[1,3,5],2]
1 78
3 93
5 66
Name: c, dtype: int64
DataFrame的切片操作
- 对行进行切片
- 对列进行切片
# 切行
df[0:2]

# 切列
df.iloc[:,0:2]

DataFrame的运算
- 同Series
============================================
假设ddd是期中考试成绩,ddd2是期末考试成绩,请自由创建ddd2,并将其与ddd相加,求期中期末平均值。
假设张三期中考试数学被发现作弊,要记为0分,如何实现?
李四因为举报张三作弊立功,期中考试所有科目加100分,如何实现?
后来老师发现有一道题出错了,为了安抚学生情绪,给每位学生每个科目都加10分,如何实现?
============================================
dic = {
'张三':[150,150,150,150],
'李四':[0,0,0,0]
}
df = DataFrame(data=dic,index=['语文','数学','英语','理综'])
qizhong = df
qimo = df
(qizhong + qizhong) / 2 # 期中期末的平均值

qizhong.loc['数学','张三'] = 0
qizhong # 将张三的数学成绩修改为0

# 将李四的所有成绩+100
qizhong['李四']+=100
qizhong

qizhong += 10
qizhong # 将所有学生的成绩+10

其他常用的数学函数
时间数据类型的转换
- pd.to_datetime(col)
dic = {
'time':['2010-10-10','2011-11-20','2020-01-10'],
'temp':[33,31,30]
}
df = DataFrame(data=dic)
df

# 查看time列的类型
df['time'].dtype
dtype('O')
import pandas as pd
# 将time列的数据类型转换成时间序列类型
df['time'] = pd.to_datetime(df['time'])
df

df['time']
0 2010-10-10
1 2011-11-20
2 2020-01-10
Name: time, dtype: datetime64[ns]
将某一列设置为行索引
- df.set_index()
# 将time列作为源数据的行索引
# 改变原始 df 的数据,inplace=True
df.set_index('time',inplace=True)
df

pandas -- 处理非数值型数据 -- 数据分析三剑客(核心)的更多相关文章
- pandas将非数值型特征转化为数值型(one-hot编码)
import pandas as pd import numpy as np import matplotlib.pyplot as plt name = np.array([['jack', 'ro ...
- San Francisco Crime Classification非数值性多分类问题
给出了旧金山以往犯罪活动的相关信息,预测特定条件下的犯罪情况 分析数据集和测试集信息: 训练集给出的信息有: 1.Dates:时间日期和时间,这里考虑时间对犯罪活动有影响,日期和下边的周几有相似处,取 ...
- 数据分析三剑客之numpy
Numpy 简介 数据分析三剑客:Numpy,Pandas,Matplotlib NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算, ...
- python数据分析三剑客之: Numpy
数据分析三剑客之: Numpy 一丶Numpy的使用 numpy 是Python语言的一个扩展程序库,支持大维度的数组和矩阵运算.也支持针对数组运算提供大量的数学函数库 创建ndarray # 1 ...
- js非数值的比较
/** * 非数值的比较: * 1.对于非数值的比较时,会将其转换成数字然后再比较 * 2.如果符号两端是字符串的值进行比较时,不会将其转换为数字进行比较,而是 * 分别比较字符串中的字符的 unic ...
- 写出将字符串中的数字转换为整型的方法,如:“as31d2v”->312,并写出相应的单元测试,正则去掉非数值、小数点及正负号外的字符串
写出将字符串中的数字转换为整型的方法,如:"as31d2v"->312,并写出相应的单元测试,输入超过int范围时提示不合法输入. public struct Convert ...
- SQL 中数值型数据截取以及四舍五入
SQL 中数值型数据截取及四舍五入 例一: -- 将两个数值分别截取只保留两位小数 ( 注意此时字段默认为 decimal ) select CAST ( 10.097 as decimal ( 10 ...
- 在JS中如何判断所输入的是一个数、整数、正数、非数值?
1.判断是否为一个数字: Number(num)不为 NaN,说明为数字 2. 判断一个数为正数: var num=prompt("请输入:"); if(Number(num)&g ...
- 在javaScript中把非数值类型的数据自动转换为数值类型的两种方式
一.使用Number()函数. 二.使用parseInt()/parseFloat()函数. 详情: 一.使用Number()函数将非数值类型的数据自动的转化为数组类型 Number()函数可以将任何 ...
- 获取数值型数组中大于60的元素个数,给数值型数组中不足60分的加20分。(数组,for循环,if条件判断语句)
package com.Summer_0420.cn; /** * @author Summer * 获取数值型数组中大于60的元素个数 * 给数值型数组中不足60分的加20分 */ public c ...
随机推荐
- 即时通讯技术文集(第41期):直播技术合集(Part1) [共12篇]
为了更好地分类阅读 52im.net 总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第41 期. [- 1 -] 移动端实时音视频直播技术详解(一):开篇 [链接] http:// ...
- IM跨平台技术学习(二):Electron初体验(快速开始、跨进程通信、打包、踩坑等)
本文由蘑菇街前端技术团队分享,原题"Electron 从零到一",有修订和改动. 1.引言 在上篇<快速了解新一代跨平台桌面技术--Electron>,我们已经对Ele ...
- VEP注释文件下载网址
Ensembl提供多个物种的注释文件: ftp://ftp.ensembl.org/pub/release-96/variation/VEP
- 关于vue加element-ui上传文件获取文件的sha256的值
首先使用element的上传文件的组件 安装依赖crypto-js npm i crypto-js <el-upload class="upload-demo" drag : ...
- JAVA多线程和并发性知识点总结
一. 什么是进程.线程?线程和进程的区别?1. 进程当一个程序进入内存运行时,即变成一个进程.进程是处于运行过程中的程序.进程是操作系统进行资源分配和调度的一个独立单位.进程的三个特征: 独立性独立存 ...
- Hadoop 概述(二)
shell定时上传linux日志信息到hdfs 从标题可以分析出来,我们要使用到shell,还要推送日志信息到hdfs上. 定义出上传的路径和临时路径,并配置好上传的log日志信息.这里我使用了上一节 ...
- Linux操作系统基础知识
一.输入法的切换Application ----> System Tools ----> Settings ----> Rejino&language ----> In ...
- biancheng-JSTL标签库
JSP 标签是一组与 HTML 标签相似,但又比 HTML 标签强大的功能标签.JSTL 用来简化 JSP 开发,可以使我们不用嵌入 Java 代码就能够开发出复杂的 JSP 页面.JSTL 包含 5 ...
- CentOS7离线安装Nginx及配置
下载离线包: 用浏览器打开地址,选择您要下载的版本:http://nginx.org/packages/centos/7/x86_64/RPMS/ 如图,我下载的1.16.1版. 执行安装: 将下载的 ...
- linux:安装php7.x
参考:链接 更新yum源 CentOS/RHEL 7.x: rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.n ...