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的数据类型)以及一组与之相关的 ...
随机推荐
- php 目录
1.laravel pswd oauth2 2.理解二叉树 3.IOC容器 4.微信支付 4.1 微信支付申请 5.DI 6.支付宝 支付H5 7.html 转 word 8.php-fpm 启动详 ...
- nslookup和dig命令
nslookup与dig两个工具功能类似,都可以查询制定域名所对应的ip地址,所不同的是dig工具可以从该域名的官方dns服务器上查询到精确的权威解答,而nslookup只会得到DNS解析服务器保存在 ...
- 链接(跳转)<router-link> 和 路由实例Router
<router-link>和<router-link>传入的对象参数中包含path路径.name命名路由.params路径参数.query ?查询,并且如果提供了 path,p ...
- ASP.net 完整登录流程
登录流程 using System; using System.Collections.Generic; using System.Linq; using System.Web; using Syst ...
- nodejs爬虫设置动态userAgent
动态 userAgent 这是我收集到的常用的浏览器头部信息,每次爬取的时候从中随机选取一个,并使用 superAgent 设置请求头部的 User-Agent 字段就好了. userAgent.js ...
- 交叉编译zookeeper的C库
原创文章,转载请正确注明本文原始URL及作者. 今天要编译一个zookeeper的C接口,要编译一个TK1版本. 事情经过这这样的:原来用的是zookeeper-3.4.6版本,但是源码中有个函数是汇 ...
- delphi 第三方组件 log4cpp.dll
log4cpp.dll LogHelper.dll TcxGridSite TcxSpreadSheetBook TcxSpreadSheetBook TcxTreeList TcxButtonEdi ...
- 【JEECG技术文档】JEECG在线聊天插件功能集成文档
原文地址:http://jeecg.iteye.com/blog/2320670 JEECG在线聊天插件功能集成文档 前提: 采用jeecg_3.6.3版本以上(Maven工程) 插件项目: 在线聊天 ...
- Spring boot 日志
修改spring boot 默认日志的配置 #logging.path= # 不指定路径在当前项目下生成springboot.log日志 # 可以指定完整的路径: #logging.file=G:/s ...
- LeetCode 题解 56. Merge Intervals
题目大意:给出一组区间,合并他们. 首先是排序,首先看start,start小的在前面.start相同的话,end小的在前面. 排序以后,要合并了. 我自己的笨方法,说实在的问题真的很多.提交了好几次 ...