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的数据类型)以及一组与之相关的 ...
随机推荐
- 安装e(fx)clipse到Eclipse (JavaFX工具)
转载自:https://www.yiibai.com/javafx/install-efxclipse-into-eclipse.html 想要在 Eclipse 中开发 JavaFX,那么可安装 J ...
- 学习excel的使用技巧一空格替换为0
问题1 把excel表格中的空格 填充为0 方法1 选中CDE列 CRTL+F 查找空 替换为0 方法2 选中CDE列 CRTL+G 打开定位 点击条件定位 选择空值 点击确定 然后在 ...
- MemberShip的 链接字符串的使用
1.运行asp.net Sql Server注册工具:aspnet_regsql.exe,详细参见:http://msdn.microsoft.com/zh-cn/library/ms229862(v ...
- 回溯法 leetcode题解 Combination Sum 递归法
题目大意:给出一个数组,用这些数组里的元素去凑一个target.元素可以重复取用. 感觉对这种题目还是生疏的.脑子里有想法,但是不知道怎么表达出来. 先记录下自己的递归法.应该还可以用循环实现. 回溯 ...
- Windows系统封装总结
注:使用虚拟机或者实体机进行封装均可,实体机进行封装的成功率更高.虚拟机进行封装建议使用VMware,12版本.过高的版本容易造成封装失败 一. Windows 10系统封装 1 ...
- angular指令的compile,prelink 和 postlink以及controller
一. 指令模板选项有complie和link两个字段,两者之间存在如下关系: 当compile字段存在时,link字段将被忽略,compile函数的返回值将作为link字段. 当compile不存在, ...
- java 中 Integer 传参方式的问题
Java本身都是值传递式的调用,对于对象传递的是地址值.给地址值重新赋值等于重新指向,不会影响外层. 而且这里Integer对象也有特殊性.其实现上可能类似 class Integer{ final ...
- centos中Mysql数据库导入sql文件
1.对于文件的导入,在Centos下里面的是首先要新建一个和文件相同名字的数据库. mysql>create database Student; 2.切换到需要导入sql文件的数据库 mysql ...
- Java泛型类型擦除以及类型擦除带来的问题
目录 1.Java泛型的实现方法:类型擦除 1-2.通过两个例子证明Java类型的类型擦除 2.类型擦除后保留的原始类型 3.类型擦除引起的问题及解决方法 3-1.先检查,再编译以及编译的对象和引用传 ...
- KVM虚拟化技术(五)虚拟机管理
一.为了提高内存.硬盘.网络的性能,需要支持半虚拟化:virtio半虚拟化驱动 二.对虚拟机的管理都是通过libvirt:所有必须要启用一个守护程序libvirtd. 三.virt-manager ① ...