Pandas常用数据结构
Pandas 概述
Pandas(Python Data Analysis Library)是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。Pandas提供了大量能使我们快速便捷地处理数据的函数和方法。它是使Python成为强大而高效的数据分析环境的重要因素之一。
Pandas专用于数据预处理和数据分析的Python第三方库,最适合处理大型结构化表格数据
- Pandas是2008年Wes McKinney于AQR资本做量化分析师时创建
- Pandas借鉴了R的数据结构
- Pandas基于Numpy搭建,支持Numpy中定义的大部分计算
- Pandas含有使数据分析工作更简单高效的高级数据结构和操作工具
- Pandas底层用Cython和C做了速度优化,极大提高了执行效率
Pandas 常用的数据结构有两种:Series 和 DataFrame
Pandas引入约定
from pandas import Series, DataFrame
import pandas as pd
Python、Numpy和Pandas对比
Python
- list:Python自带数据类型,主要用一维,功能简单,效率低
- Dict:Python自带数据类型,多维键值对,效率低
Numpy
- ndarray:Numpy基础数据类型,单一数据类型
- 关注数据结构/运算/维度(数据间关系)
Pandas
- Series:1维,类似带索引的1维ndarray
- DataFrame:2维,表格型数据类型,类似带行/列索引的2维ndarray 关注数据与索引的关系(数据实际应用)
从实用性、功能强弱和和可操作性比较:list < ndarray < Series/DataFrame
数据规整和分析工作中,ndarry数组作为必要补充,大部分数据尽量使用Pandas数据类型
Pandas数据结构
Pandas的核心为两大数据结构,数据分析相关所有事物都是围绕着这两种结构进行的
- Series:用于存储一个序列的一维数据
- DataFrame:DataFrame作为更复杂的数据结构,则用于存储多维数据
虽然这些数据结构不能解决所有的问题,但它们为大多数应用提供了有效和强大的工具。就简洁性
而言,他们理解和使用起来都很简单。
Series 简介
Series 是一个带有 名称 和 索引 的 一维数组,在 Series 中包含的数据类型可以是整数、浮点、字符串、Python对象等。
基础属性:
- values:返回元素
- index:返回索引
- columns:返回列名
- dtypes:返回类型
- size:返回元素个数
- ndim:返回维度数
- shape:返回数据形状(行列数目)
Series 创建
1. 简单构建一个含索引和年龄的用户信息
import pandas as pd
user_info = pd.Series(data=[24, 45, 33, 62])
user_info # 结果如下
0 24
1 45
2 33
3 62
dtype: int64
2. 将索引自定义为名字,即将年龄与用户联系起来
# 构建索引
# name="user_index":为索引起一个名字
user_index=pd.Index(['Tom','Scott','Jass','Jame'],name="user_index")
# 构建Series
# name="user_info":为 Series 起个名字
user_info = pd.Series(data=[24, 45, 33, 62],index=user_index,name="user_info",dtype=float)
# 结果如下
user_index
Tom 24.0
Scott 45.0
Jass 33.0
Jame 62.0
Name: user_info, dtype: float64
Series 访问
Series 包含了 dict 的特点,也就意味着可以使用与 dict 类似的一些操作。我们可以将 index 中的元素看成是 dict 中的 key
# 查看所有的值列表
user_info.values # 查看所有的索引列表
user_info.index # 获取Tom的年龄
user_info['Tom'] # 24.0 # 可以通过 get 方法来获取。通过这种方式的好处是当索引不存在时,不会抛出异常。
user_info['Scott'] # 45.0
Series 除了像 dict 外,也非常像 ndarray,这也就意味着可以采用切片操作
# 获取第一个元素
user_info[0] # 24.0 # 获取前三个元素(左闭右开)
user_info[:3]
"""
user_index
Tom 24.0
Scott 45.0
Jass 33.0
Name: user_info, dtype: float64
""" # 获取年龄大于50的元素
user_info[user_info>50]
"""
user_index
Jame 62.0
Name: user_info, dtype: float64
""" # 获取第4个和第二个元素
user_info[[3, 1]]
"""
user_index
Jame 62.0
Scott 45.0
Name: user_info, dtype: float64
""" # 查看去重后的元素
user_info.unique() # 计算不同元素出现的次数
user_info.value_counts() # 判断元素所属关系
s.isin([24,32]) # 将元素中的值取出判断是否出现在指定数组中
s[s.isin([24,32])]
Series 的向量化操作
Series 与 ndarray 一样,也是支持向量化操作的。同时也可以传递给大多数期望 ndarray 的NumPy 方法。
# 将所有人的年龄加1
user_info + 1
"""
user_index
Tom 25.0
Scott 46.0
Jass 34.0
Jame 63.0
Name: user_info, dtype: float64
"""
DataFrame 简介
DataFrame 是一个带有索引的二维数据结构,每列可以有自己的名字,并且可以有不同的数据类型。你可以把它想象成一个 excel 表格或者数据库中的一张表,DataFrame 是最常用的 Pandas 对象。
基础属性:
- values:返回元素
- index:返回索引
- columns:返回列名
- dtypes:返回类型
- size:返回元素个数
- ndim:返回维度数
- shape:返回数据形状(行列数目)
DataFrame 创建
构建方式一:构建一个dict,将dict传递给data参数
data={
"age":[12,23,45,37],
"city":["chongqing","nanjing","wuhan","shenyang"]
}
index = pd.Index(['Tom','Scott','Jass','Jame'],name="user_name")
pd.DataFrame(data=data,index=index)

由上表我们可以看到,DataFrame已经成功构建,且索引是用户姓名,另外两列信息分别为用户年龄和城市信息
构建方式二:先构建一个二维数组,然后再生成一个列名称列表。
data=[[12,"shenyang"],
[23,"chongqing"],
[45,"wuhan"],
[37,"nanjing"]
]
index = pd.Index(['Tom','Scott','Jass','Jame'],name="user_index")
# 标签
column = ["age","city"]
user_info = pd.DataFrame(data=data,index=index,columns=column)
user_info

DataFrame 访问
访问行 --> 通过索引名 --> loc方法
# 通过索引访问某个人的数据
user_info.loc[['Tom']] # 通过索引访问指定人的数据
user_info.loc[['Tom','Jass']]
访问行 --> 通过行所在位置 --> iloc方法
# 访问第一个人的信息
user_info.iloc[0] # 访问前3个人的信息
user_info.iloc[0:3]
访问列 --> 通过属性(.列名)
user_info.age
"""
user_index
Tom 12
Scott 23
Jass 45
Jame 37
Name: age, dtype: int64
"""
访问列 --> 通过[column]
# 获取一列数据
user_info[["age"]] # 获取多列数据
user_info[["age","city"]]
"""
age city
user_index
Tom 12 shenyang
Scott 23 chongqing
Jass 45 wuhan
Jame 37 nanjing
"""
新增列
通过传入一个标量,Pandas 会自动帮我们广播来填充所有的位置
# 添加的信息一致
user_info["sex"]="male"
user_info
"""
age city sex
user_index
Tom 12 shenyang male
Scott 23 chongqing male
Jass 45 wuhan male
Jame 37 nanjing male
""" # 添加的指定信息
user_info["sex"]=["male","female","male","male"]
user_info
"""
age city sex
user_index
Tom 12 shenyang male
Scott 23 chongqing female
Jass 45 wuhan male
Jame 37 nanjing male
""" # 在原有信息上新增一列与原有信息相关数据
user_info.assign(age_add_one = user_info["age"] + 1)
"""
age city sex age_add_one
user_index
Tom 12 shenyang male 13
Scott 23 chongqing female 24
Jass 45 wuhan male 46
Jame 37 nanjing male 38
""" import numpy as np
user_info.assign(sex_code = np.where(user_info["sex"] == "male", 1, 0))
"""
age city sex sex_code
user_index
Tom 12 shenyang male 1
Scott 23 chongqing female 0
Jass 45 wuhan male 1
Jame 37 nanjing male 1
"""
删除列
drop(labels, axis=0, level=None, inplace=False, errors='raise')
参数解释:
- lables:接收string或array。代表删除的行或列的标签。无默认
- axis:接收0或1。代表操作的轴向。默认为0
- levels:接收int或者索引名。代表标签所在级别。默认为None
- inplace:接收boolean。代表操作是否对原数据生效。默认为False
# 删除某一列
user_info.drop(["sex"],axis=1)
Pandas常用数据结构的更多相关文章
- Pandas 的数据结构
Pandas的数据结构 导入pandas: 三剑客 from pandas import Series,DataFrame import pandas as pd import numpy as np ...
- pandas的数据结构之series
Pandas的数据结构 1.Series Series是一种类似于一维数组的对象,由下面两个部分组成: index:相关的数据索引标签 values:一组数据(ndarray类型) series的创建 ...
- Pandas之数据结构
pandas入门 由于最近公司要求做数据分析,pandas每天必用,只能先跳过numpy的学习,先学习大Pandas库 Pandas是基于Numpy构建的,让以Numpy为中心的应用变得更加简单 pa ...
- Pandas常用操作方法
Pandas pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的. Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具. pandas提 ...
- NumPy和Pandas常用库
NumPy和Pandas常用库 1.NumPy NumPy是高性能科学计算和数据分析的基础包.部分功能如下: ndarray, 具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组. 用于对整组数 ...
- Pandas常用基本功能
Series 和 DataFrame还未构建完成的朋友可以参考我的上一篇博文:https://www.cnblogs.com/zry-yt/p/11794941.html 当我们构建好了 Series ...
- JAVA常用数据结构及原理分析
JAVA常用数据结构及原理分析 http://www.2cto.com/kf/201506/412305.html 前不久面试官让我说一下怎么理解java数据结构框架,之前也看过部分源码,balaba ...
- 常用数据结构及复杂度 array、LinkedList、List、Stack、Queue、Dictionary、SortedDictionary、HashSet、SortedSet
原文地址:http://www.cnblogs.com/gaochundong/p/data_structures_and_asymptotic_analysis.html 常用数据结构的时间复杂度 ...
- php常用数据结构
# 常用数据结构--------------------------------------------------------------------------------## 树(Tree)- ...
随机推荐
- (八十五)c#Winform自定义控件-引用区块
前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kwwwvagaa/NetWinformControl 码云:ht ...
- servlet中的forward()和redirect()
从地址栏显示来说 forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器 浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏 ...
- github基本使用---从零开始
1.使用之前首先得有账号(附链接):https://github.com/ 2.注册帐号之后得有方便上传项目的工具git bash下载安装 https://gitforwindows.org/ 3.启 ...
- 面试官,不要再问我“Java GC垃圾回收机制”了
Java GC垃圾回收几乎是面试必问的JVM问题之一,本篇文章带领大家了解Java GC的底层原理,图文并茂,突破学习及面试瓶颈. 楔子-JVM内存结构补充 在上篇<JVM之内存结构详解> ...
- CentOS 7.7版本中NAT上网问题
一.NAT(地址转换模式)概念 如果你的网络ip资源紧缺,但是你又希望你的虚拟机能够联网,这时候NAT模式是最好的选择.NAT模式借助虚拟NAT设备和虚拟DHCP服务器,使得虚拟机可以联网. 二.具体 ...
- 自学web前端达到什么水平,才能满足求职的标准?
大多数野生程序员最棘手的问题就是如何依靠技术解决温饱,通俗来讲就是技术折现的问题. 如果是单纯出于兴趣,或者只是为了突击某一阶段或者某一项目技术壁垒,不跟就业挂钩的自学倒也是无关痛痒.但是当上岗成为自 ...
- Java学习笔记之抽象类与接口
抽象类(abstract) 抽象类概述:一个类被abstract修饰表示这个类是抽象类, 自己定义方法但是不实现方法,后代去实现 抽象方法: 一个方法被abstract修饰表示这个方法是抽象方法 ...
- 洛谷P1608 路径计数
题目简介 题目描述 给你一个N点M边的有向图,求第一个点到第n个点的最短路和最短路条数 题目分析 很明显直接Dijkstra求最短路,加一个最短路计数 如下: if(dis[y]>dis[x]+ ...
- 渗透测试-基于白名单执行payload--Pcalua
0x01 Pcalua简介 Windows进程兼容性助理(Program Compatibility Assistant)的一个组件. 说明:Pcalua.exe所在路径已被系统添加PATH环境变量中 ...
- [JZOJ5459]【NOIP2017提高A组冲刺11.7】密室
Description 小X 正困在一个密室里,他希望尽快逃出密室.密室中有N 个房间,初始时,小X 在1 号房间,而出口在N 号房间.密室的每一个房间中可能有着一些钥匙和一些传送门,一个传送门会单向 ...