博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《pandas入门》之基本数据结构
阅读量:4230 次
发布时间:2019-05-26

本文共 3840 字,大约阅读时间需要 12 分钟。

前言

pandas有两种数据结构,其中主要得是Series和DateFrame,本文主要讲解和记录这两种数据的结构和操作。

第一种结构:Series

Series是一种类似一维数组的数据结构,它由一组数据和一组相对应的索引组成,Series的创建形式是Series(list,index=),需要显式的指出index,若不显式指出index ,则自动创建0到N-1的索引。

obj_1 = pd.Series([1,2,3,4])print obj_1print type(obj_1)     print obj_1.values    print type(obj_1.values )    print obj_1.index     #输出:0    11    22    33    4dtype: int64
[1 2 3 4]
RangeIndex(start=0, stop=4, step=1)obj_2 = pd.Series([1,2,3,4],index=["a","b","c","d"])print obj_2print obj_2.values #[1 2 3 4]print obj_2.index #Index([u'a', u'b', u'c', u'd'], dtype='object')#输出:a 1b 2c 3d 4dtype: int64[1 2 3 4]Index([u'a', u'b', u'c', u'd'], dtype='object')

Series还有一些其他的数据特性:

# Series 索引是不可修改对象obj_22 = pd.Series([1,2,3,4],index=["a","b","c","d"])obj_22.index[1] = "e" 报错只能重新给一个新的index的序列。obj_22.index = ['e','f','g','h']print obj_22.index#输出:Index([u'e', u'f', u'g', u'h'], dtype='object')# Series对象还有name属性,相当于是增加列名obj_22.name = "population"obj_22.index.name = "state"print obj_22#输出:statee    1f    2g    3h    4Name: population, dtype: int64# 索引操作符合numpy数组的运算print obj_2["a"]print obj_2 * 2#输出:1a    2b    4c    6d    8dtype: int64# 注意以下操作,直接在索引位置筛选值print obj_2[obj_2>2]#输出:c    3d    4dtype: int64# 因为Series 可以看做是一个定长的有序字典,因为它是一个索引值到数据值的映射print  'a' in obj_2    print  'e' in obj_2#输出:TrueFalse# 所以可以直接用dict建立Series,若不指定索引,则使用字典的key,# 若指定则使用指定值,指定中索引重复的输出值,索引没值的则输出NANsdate = {
"A":1000,"B":2000,"C":3000,"D":4000}obj_3 = pd.Series(sdate)print obj_3#输出:A 1000B 2000C 3000D 4000stats = {
"a","b","C","D"}obj_4 = pd.Series(sdate,index=stats)print obj_4#输出:a NaNC 3000.0b NaND 4000.0dtype: float64# pandas 中 isnull 和 notnull 函数用来检测缺失值print obj_4.isnullprint obj_4.notnull#输出:
# 推荐用以下的判断方式print pd.isnull(obj_4)print pd.notnull(obj_4)#输出:a TrueC Falseb TrueD Falsedtype: boola FalseC Trueb FalseD Truedtype: bool

第二中结构 DataFrame

DataFrame是一个表格型的数据结构,它的数据存储在一个或多个的二维模块中,它含有一组有序的列数据,可以理解为列名,每列的数据类型可以不一样,所以,DataFrame有行索引和列索引两种检索方式,这两种操作是平衡的。

# 创建data = {
"name":["zhang","li","wang"],"num":[1,2,3],"value":[1.5,2.0,3.0]}fram = pd.DataFrame(data)输出 name num value0 zhang 1 1.51 li 2 2.02 wang 3 3.0# 可以指定列序列 columns可以理解为列名fram_1 = pd.DataFrame(data=data,columns=["name","value","num"],index=["a","b","c"])#输出: name value numa zhang 1.5 1b li 2.0 2c wang 3.0 3# 当传入的列在数据中找不到,则显示NANfram_2 = pd.DataFrame(data=data,columns=["name","value","num","test"],index=["a","b","c"])#输出: name value num testa zhang 1.5 1 NaNb li 2.0 2 NaNc wang 3.0 3 NaN# 可以把列数据(列名)理解为索引,获得一个Series# 列索引皆可看做是DataFrame的属性输出数据fram_2.columns # 输出列数据#输出:Index([u'name', u'value', u'num', u'test'], dtype='object')fram_2["value"]#输出a 1.5b 2.0c 3.0Name: value, dtype: float64fram_2.name#输出a zhangb lic wangName: name, dtype: object# 可以给某列赋值,当该列不存在的时候增加该列,fram_2["test"] = 16.5#输出: name value num testa zhang 1.5 1 16.5b li 2.0 2 16.5c wang 3.0 3 16.5del fram_2["test"]#输出: name value numa zhang 1.5 1b li 2.0 2c wang 3.0 3# 行索引不能直接获取,需要使用索引字段# loc只能通过索引值获取,而iloc是通过行号来获取,# ix是将两者结合起来,即通过行号又通过索引值来获取print fram_2.loc["b"]print fram_2.iloc[2]print fram_2.ix["b"]#输出name livalue 2num 2Name: b, dtype: objectname wangvalue 3num 3Name: c, dtype: objectname livalue 2num 2Name: b, dtype: objectfram_2.index.name = "row"fram_2.columns.name = "col"#输出col name value numrow a zhang 1.5 1b li 2.0 2c wang 3.0 3# 对于嵌套的字典数据类型,外层字典的键是列索引,内层键作为行索引op = {
"A":{
"a":100,"b":200},"B":{
"a":111,"c":222}}fram_3 = pd.DataFrame(op)输出: A Ba 100.0 111.0b 200.0 NaNc NaN 222.0

转载地址:http://nliqi.baihongyu.com/

你可能感兴趣的文章
关于#include "stdafx.h"
查看>>
VC下线程同步的三种方法(互斥、事件、临界区)/(转)
查看>>
非常好的一篇U-BOOT的文章--转载
查看>>
【设计模式】学习之创建型 单例模式
查看>>
【设计模式】学习之创建型 原型模式
查看>>
【设计模式】学习之结构型 适配器模式-装饰器模式-代理模式
查看>>
Maven+Eclipse+Tomcat+Spring MVC web 请求 404 问题总结及noHandlerFound
查看>>
SpringMVC API缓存 LastModified的实现总结
查看>>
406 Not Acceptable 415 Unsupported Media Type Spring MVC consumes与produces
查看>>
MyBatis 高级映射与懒加载
查看>>
HCIP-H12-222练习题
查看>>
点到点IPSec VPN的配置
查看>>
MySQL InnoDB何时更新表的索引统计信息
查看>>
MTU 设置错误导致防火墙或者路由器断网
查看>>
子网划分详解与子网划分实例
查看>>
游戏通讯技术:帧同步技术
查看>>
防火墙技术指标---并发连接数/吞吐量
查看>>
V100服务器和T4服务器的性能指标
查看>>
elasticsearch 启动、停止及更改密码
查看>>
Kafka,它为什么速度会这么快?
查看>>