Pandas之数据结构
pandas入门
由于最近公司要求做数据分析,pandas每天必用,只能先跳过numpy的学习,先学习大Pandas库
Pandas是基于Numpy构建的,让以Numpy为中心的应用变得更加简单
pandas的数据结构介绍
Series
- 由一组数据以及一组数据标签即索引组成
import pandas as pd
from pandas import Series,DataFrame obj = Series([4,7,-5,3])
# 索引在左边,值在右边,默认从0开始
obj
0 4
1 7
2 -5
3 3
dtype: int64 # 制定索引
obj2 = Series([4,7,-5,3],index = ['a','b','c','d'])
obj2
a 4
b 7
c -5
d 3
dtype: int64
# 查看索引
obj2.index
Index(['a', 'b', 'c', 'd'], dtype='object') # 查询
obj2[['a','b','c']]
a 4
b 7
c -5
dtype: int64 obj2[obj2>0]
a 4
b 7
d 3
dtype: int64
- 还可以直接看成一个关系型字典
sdata = {'ke':35000,'text':70000,'orgen':16000}
obj3 = Series(sdata)
obj3 ke 35000
text 70000
orgen 16000
dtype: int64 keys = ['ke','text','orgen','xu']
obj4 = Series(sdata, index=keys)
obj4
ke 35000.0
text 70000.0
orgen 16000.0
xu NaN
dtype: float64
- 检测缺失值的重要两个函数 isnull和notnull
obj4[obj4.isnull()]
xu NaN
dtype: float64 obj4[obj4.notnull()]
ke 35000.0
text 70000.0
orgen 16000.0
dtype: float64
- Series本身和索引都有一个name属性
# 可以理解成对象名称
obj4.name = 'pop'
# 对象的索引的名称
obj4.index.name = 'state'
obj4 state
ke 35000.0
text 70000.0
orgen 16000.0
xu NaN
Name: pop, dtype: float64 # Series的索引可以就地修改
obj4.index = ['new_ke','new_text','new_orgen','new_xu']
new_ke 35000.0
new_text 70000.0
new_orgen 16000.0
new_xu NaN
Name: pop, dtype: float64
DataFrame
- DataFrame是一个表格型数据结构,最常用的是直接传入一个由等长列表或者是Numpy数组组成的字典
data = {'state':['oh','oh','vad','vad'],
'yead':[2000,2001,2002,2003],
'pop':[1.5,1.7,3.6,2.4]
} frame = DataFrame(data)
# 自动有序排列
yead state pop
0 2000 oh 1.5
1 2001 oh 1.7
2 2002 vad 3.6
3 2003 vad 2.4 # 如果传入的列在数据中找不到,就产生NaN
DataFrame(data,columns=['yar','yead'])
yar yead
0 NaN 2000
1 NaN 2001
2 NaN 2002
3 NaN 2003
通过类似字典标记的方式或属性的方式,可以将DataFrame的列获取为一个Series
data = {'state':['oh','oh','vad','vad'],
'years':[2000,2001,2002,2003],
'pop':[1.5,1.7,3.6,2.4]
}
frame2 = pd.DataFrame(data,columns=['years','state','pop'])
# 原地修改索引
frame2.index=['one','two','three','four']
frame2
years state pop
one 2000 oh 1.5
two 2001 oh 1.7
three 2002 vad 3.6
four 2003 vad 2.4
frame2.columns
Index(['years', 'state', 'pop'], dtype='object')
# 通过类似字典标记的方式或属性的方式,可以将DataFrame的列获取为一个Series
# 字典操作
series_=frame2['state']
series_
one oh
two oh
three vad
four vad
Name: state, dtype: object
# 对象操作
frame2.years
one 2000
two 2001
three 2002
four 2003
Name: years, dtype: int64
# 查看具体一行的数据
frame2.ix['three']
years 2002
state vad
pop 3.6
Name: three, dtype: object
# 修改具体一列的数
frame2['new_raw']=16.5
frame2
years state pop new_raw
one 2000 oh 1.5 16.5
two 2001 oh 1.7 16.5
three 2002 vad 3.6 16.5
four 2003 vad 2.4 16.5
将列表或数组赋值给某个列时,其长度必须跟DataFrame的长度相匹配,否则自动填充空值
from pandas import Series
val = Series([-1.2,-1.5,-1.7], index=['two','four','five'])
frame2['new_raw'] = val
frame2
years state pop new_raw
one 2000 oh 1.5 NaN
two 2001 oh 1.7 -1.2
three 2002 vad 3.6 NaN
four 2003 vad 2.4 -1.5
删除列
# 为不存在的列赋值
frame2['eastern'] = frame2.state == 'oooo'
frame2
years state pop new_raw eastern
one 2000 oh 1.5 NaN False
two 2001 oh 1.7 -1.2 False
three 2002 vad 3.6 NaN False
four 2003 vad 2.4 -1.5 False
del frame2['eastern']
frame2.columns
Index(['years', 'state', 'pop', 'new_raw'], dtype='object')
警告:通过索引方式返回的列只是相应数据的视图而已,并不是副本,对返回的Series所做的任何就地修改都会反映到源数据上,可以通过Series的copy方法显示的复制列
嵌套字典 外层字典的键作为列,内层键作为行索引
pop = {'Nevada':{2001:2.4,2002:2.9},
'Ohio':{2000:1.5,2001:1.7,2002:3.6}
}
frame3=pd.DataFrame(pop)
frame3
Nevada Ohio
2000 NaN 1.5
2001 2.4 1.7
2002 2.9 3.6
转置
frame3.T
2000 2001 2002
Nevada NaN 2.4 2.9
Ohio 1.5 1.7 3.6
# 内层字典的键会被合并、排序以形成最终的索引,如果显示指定了索引,就不会这样
frame3.reindex(index=[2001,2002,2000])
Nevada Ohio
2001 2.4 1.7
2002 2.9 3.6
2000 NaN 1.5
DataFrame构造函数所能接受的各种数据
| 类型 | 说明 |
|---|---|
| 二维ndarry | 数据矩阵 |
| 由数组、列表或元组组成的字典 | 每个序列变成DataFrame的一列。所有序列的长度必须相同 |
| Numpy结构化/记录数组 | 类似于由数组组成的字典 |
| 由Series组成的子典 | 每个Series会成为一列 |
| 由字典组成的字典 | 各内层字典会成为一列 |
| 字典或Series的列表 | 各项将会成为DataFrame的一行。 |
| 由列表或元组组成的列表 | 类似于'二维ndarray' |
| 另一个DataFrame | 该DataFrame的索引将会被沿用,除非显示指定了其他索引 |
| Numpy的maskedArray | 类似于'二维ndarray'的情况 |
如果设置了DataFrame的index和columns的name属性,则这些信息也会被显示出来
frame3.index.name='year'
frame3.columns.name = 'state'
frame3
state Nevada Ohio
year
2000 NaN 1.5
2001 2.4 1.7
2002 2.9 3.6
values属性返回一个二维ndarray的形式
frame3.values
array([[nan, 1.5],
[2.4, 1.7],
[2.9, 3.6]])
如果各列的数据类型不同,则会选用能兼容所有列的数据类型
frame2.values
array([[2000, 'oh', 1.5, nan],
[2001, 'oh', 1.7, -1.2],
[2002, 'vad', 3.6, nan],
[2003, 'vad', 2.4, -1.5]], dtype=object)
索引对象
pandas的索引对象负责管理轴标签和其他元数据比如轴名称等,构建Series或DataFrame时,所用到的任何数组或其他序列的标签都会被转换成一个Index
obj = Series(range(3), index=['a','b','c'])
obj.index
Index(['a', 'b', 'c'], dtype='object')
obj.index[:1]
Index(['a'], dtype='object')
index对象是不可修改的,这样子才能index对象在多个数据结构之间安全共享
obj.index[0] = '5'
TypeError Traceback (most recent call last)
<ipython-input-24-61511960448d> in <module>()
----> 1 obj.index[0] = '5'
E:\anaconda3\lib\site-packages\pandas\core\indexes\base.py in __setitem__(self, key, value)
2063
2064 def __setitem__(self, key, value):
-> 2065 raise TypeError("Index does not support mutable operations")
2066
2067 def __getitem__(self, key):
TypeError: Index does not support mutable operations
index的继承
import numpy as np
index = pd.Index(np.arange(3))
index
Int64Index([0, 1, 2], dtype='int64')
obj2 = Series([1.5,-2.5,0], index = index)
obj2
0 1.5
1 -2.5
2 0.0
dtype: float64
obj2.index is index
True
pandas中主要的Index对象
| 类 | 说明 |
|---|---|
| Index | 将轴标签表示为一个由Python对象组成的Numpy数组 |
| Int64Index | 针对整数的特殊Index |
| MultiIndex | '层次化'索引对象,表示单个轴上的多次索引 |
| DatetimeIndex | 存储纳秒级时间戳 |
| PeriodIndex | 针对Period数据的特殊Index |
frame3
state Nevada Ohio
year
2000 NaN 1.5
2001 2.4 1.7
2002 2.9 3.6
2000 in frame3.index
True
'Ohio' in frame3.columns
True
每个索引都有一些方法和属性
| 方法 | 说明 |
|---|---|
| append | 连接另一个index对象,产生新的index |
| diff | 计算差集,并得到一个index |
| intersection | 计算交集 |
| union | 计算并集 |
| isin | 计算y一个指示值是否都包含在参数集合中的布尔型数组 |
| delete | 删除索引i处的元素,并得到新的index |
| drop | 将元素插入到索引i处,并得到新的index |
| insert | 当各元素均大于等于前一个元素时,返回True |
| is_monotonic | 当index没有重复值时,返回True |
| is_unique | 当index没有重复值时,返回True |
| unique | 计算index中唯一值的数组 |
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的使用(3)---Pandas的数据结构
Pandas的使用(3) Pandas的数据结构 1.Series 2.DataFrame
- pandas中数据结构-Series
pandas中数据结构-Series pandas简介 Pandas是一个开源的,BSD许可的Python库,为Python编程语言提供了高性能,易于使用的数据结构和数据分析工具.Python与Pan ...
- 02. Pandas 1|数据结构Series、Dataframe
1."一维数组"Series Pandas数据结构Series:基本概念及创建 s.index . s.values # Series 数据结构 # Series 是带有标签的一 ...
- Python数据分析Pandas库数据结构(一)
pandas数据结构 1.生成一维矩阵模拟数据 import pandas as pdimport numpy as nps = pd.Series([1,2,3,4,np.nan,9,9])s2 = ...
- pandas 的数据结构(Series, DataFrame)
Pandas 讲解 Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的. Pandas 纳入了大量库和一些标 ...
- pandas 的数据结构Series与DataFrame
pandas中有两个主要的数据结构:Series和DataFrame. [Series] Series是一个一维的类似的数组对象,它包含一个数组数据(任何numpy数据类型)和一个与数组关联的索引. ...
- pandas的数据结构
要使用pandas,需要熟悉它的两个主要的数据结构,Series和DataFrame. Series series是一种类似于以为数组的对象,它由一组数据(各种numpy的数据类型)以及一组与之相关的 ...
随机推荐
- 【每日一学】pandas_透视表函数&交叉表函数
每日一悟 [分开工作内外8小时] 前一个月,我经常把工作内的问题带到路上.地铁上.睡觉前,甚至是周末. 然而很快发现,我工作外的成就几乎没有,而工作内的进展也并不理想. 仔细想想,工作外是需要学新东西 ...
- 13.App爬取相关库的安装(Charles,Mitmproxy,Appium)
由于App没有像浏览器一样直观的后台请求工具,主要用一些抓包技术抓取数据.(目前也在学习安装,参考书籍.) 首先呢,一些简单的接口通过Charles或mitmproxy分析,找出规律,直接用程序去抓取 ...
- python学习笔记_week24
note 内容回顾: Model - 数据库操作 on_delete Query_set select_related 跨表数据一次性拿过来,不增加sql查询次数.帮助跨表,后面参数只能加连表字段 f ...
- 05python上
location 位置 untitled 未命名的 fullstack 全栈 interpreter 解释器 字符格式化输出 占位符 %s s = string %d d = digit 整数 %f ...
- JS获取QueryString(Jquery)
QueryString = { data: {}, Initial: function() { var aPairs, aTmp; var qu ...
- Linux 用户、权限
用户:uid 保存在 /etc/passwd 用户分类: 管理员 uid--0 普通用户 --系统用户 uid 1-499 --一般用户 uid 500-60000 组:gid 保存在/etc/ ...
- MySQL 5.7 以上版本默认禁止 0000-00-00 的日期
今天做数据同步,发现一直有报错,集中在时间的默认值.数据源的mysql版本是5.5.30,有些时间字段默认值设置为0000-00-00 00:00:00.目标mysql版本为5.7.17,查资料发现, ...
- ssm框架之配置日志系统打印到控制台与指定文件
前提: 0:ssm框架已经搭建并且成功运行 1.maven环境配置成功 2.tomcat配置成功,并且配置本机的tomcat环境变量 内容: 0.导入所需要的jar包 <!-- 配置log4j日 ...
- 解决 'Could not convert variant of type (NULL) into type (String)
写存储过程中有不允许为空的字段,在客户端转化取数时显示 Could not convert variant of type (NULL) into type (String) 可以在存储过程中使用is ...
- unity "[ ]"标签
[CanEditMultipleObjects]//可多对象编辑 public class Collider2DEditor:Editor {} [SerializeField]//序列化私有属性 p ...