pandas(零)数据结构
pandas的两个主要的数据结构:
Series
series是一种类似于一维数组的对象,它由一组数据(NumPy数组类型的数据)和一组与之相关的数据标签(索引)组成。
from pandas import Series obj = Series((1,2,3,4,5))
obj.index #索引,默认从0开始的整数
obj.values #array数组 #自定义索引的Series
obj_with_index = Series([4,65,3,4],index=['a','b','c','d'])
print(obj_with_index)
可以通过索引的方式选取或修改单个或一组值
>>> from pandas import Series
>>> obj = Series([1,2,3,4],index=('a','b','c','d'))
>>> obj
a 1
b 2
c 3
d 4
dtype: int64
>>> obj['a']
1
>>> obj['c'] = 8
>>> obj
a 1
b 2
c 8
d 4 >>> obj[('a','b','d')] = (11,12,14)
>>> obj
a 11
b 12
c 8
d 14
dtype: int64
>>>
对其对象进行NumPy运算的时候会保留索引和值之间的链接
>>> obj -2
a 9
b 10
c 6
d 12
dtype: int64
>>> obj[obj > 10]
a 11
b 12
d 14
dtype: int64
>>>
还可以将Series对象看成一个定长的有序的字典,一个索引和值组成的键值对的映射。
可以应用在很多需要字典参数的函数中,例如函数的关键字参数
利用字典作为参数生成一个自定义索引的Series对象
>>> metadata = {"a":1,"b":2,"c":3}
>>> data= Series(metadata)
>>> data
a 1
b 2
c 3
dtype: int64
根据索引去建对象,如果字典的键中没有在索引中,则不会创建该索引-值的映射,索引不在字典的键中,则会对该索引创建一个Nan值(表示缺失或NA值)
可以利用isnull和notnull去判断是不是Nan值
>>> states = ['b','c','d','e']
>>> obj4 = Series(metadata,index = states)
>>> obj4
b 2.0
c 3.0
d NaN
e NaN
dtype: float64 >>> import pandas as pd
>>> pd.isnull(obj4)
b False
c False
d True
e True
dtype: bool
>>> pd.notnull(obj4)
b True
c True
d False
e False
dtype: bool
#series对象本身就有isnull和notnull方法
>>> obj4.isnull()
b False
c False
d True
e True
dtype: bool
>>> obj4.notnull()
b True
c True
d False
e False
dtype: bool
Series一个最重要的功能就是在算术运算中会自动对齐索引。
Series对象及其索引都有一个name属性
dtype: bool
>>> obj4.name ="numpy_array"
>>> obj4.index.name = 'letter'
>>> obj4
letter
b 2.0
c 3.0
d NaN
e NaN
Name: numpy_array, dtype: float64
DataFrame:
DataFrame是一个表格型的数据结构,它含有一组有序的列,每一列可以是不同的值类型。DataFrame不仅有列索引,还有行索引。DataFrame中的数据是以一个或多个二维块存放的。
用等长列表或NumPy数组组成的字典去创建DataFrame对象
>>> data = {'name':['li','wang','yang','sun'],'height':[1.7,1.8,1.6,1.55],'age':[30,31,34,61]}
>>> df_obj = DataFrame(data)
>>> df_obj
age height name
0 30 1.70 li
1 31 1.80 wang
2 34 1.60 yang
3 61 1.55 sun
如果原始数据是嵌套的字典,会将外层字典的建作为列,内层字典的键做为行索引
如果指定了列序列,就会按照指定的列序列的顺序进行排列,行序列会自动生成
>>> df_obj = DataFrame(data,columns=['name','age','height'])
>>> df_obj
name age height
0 li 30 1.70
1 wang 31 1.80
2 yang 34 1.60
3 sun 61 1.55
如果传入的列在数据中找不到也会产生Nan值
>>> df_obj = DataFrame(data,columns=['name','age','height','weight'],index=('a','b','c','d'))
>>> df_obj
name age height weight
a li 30 1.70 NaN
b wang 31 1.80 NaN
c yang 34 1.60 NaN
d sun 61 1.55 NaN
>>>
可以通过字典标记的方式或属性的方式,将DataFrame的列获取为一个Series:
>>> df_obj.columns
Index(['name', 'age', 'height', 'weight'], dtype='object')
>>> df_obj.name
a li
b wang
c yang
d sun
Name: name, dtype: object
>>> df_obj['name']
a li
b wang
c yang
d sun
Name: name, dtype: object
ps:在获取列的时候不仅继承了原来的索引,还将Series的name属性设置好了
也可以给列赋值,但如何是将列表或数组赋值给某列,其长度必须跟DataFrame的长度相同,如果复制的是一个Series对象,就会根据索引去精确匹配
>>> df_obj.weight = 200
>>> df_obj
name age height weight
a li 30 1.70 200
b wang 31 1.80 200
c yang 34 1.60 200
d sun 61 1.55 200
删除列用del关键字
>>> del df_obj['weight']#注意:这里不能用列的属性,即:del df_obj.weigt是错误的
>>> df_obj
name age height
a li 30 1.70
b wang 31 1.80
c yang 34 1.60
d sun 61 1.55
dataframe对象也可以转置
>>> df_obj.T
a b c d
name li wang yang sun
age 30 31 34 61
height 1.7 1.8 1.6 1.55
索引对象
index对象不能被修改,这样保证了多个数据结构能够安全共享
创建索引对象及在Series或DataFrame中使用
>>> index = pd.Int64Index(range(1,6))
>>> index
Int64Index([1, 2, 3, 4, 5], dtype='int64')
>>> data = Series((11,22,33,44,55),index=index)
>>> data
1 11
2 22
3 33
4 44
5 55
>>> index.append(pd.Index((6,)))
Int64Index([1, 2, 3, 4, 5, 6], dtype='int64')
pandas的索引对象
类 | 说明 |
Index | 最泛化的Index对象,将轴标签表示为一个由python对象组成的NumPy数组 |
Int64Index | 针对整数的特殊Index |
MultiIndex | 层次化索引对象,表示单个轴上的多层索引。可以看作由元组组成的数组 |
DatatimeIndex | 存储纳秒级时间戳 |
PeriodIndex | 针对Period数据(时间间隔)的特殊Index |
Index对象的方法与属性
方法 | 属性 |
---|---|
append | 链接另一个index对象,产生一个新的Index |
diff | 计算差集,并得到一个Index |
intersection | 计算交集 |
union | 计算并集 |
isin | 计算一个指示各值是否都包含在参数集合中的布尔型数组 |
delete | 产出索引i出的元素,并得到新的Index |
drop | 删除传入的值,并得到新的Index |
insert | 将元素插入到索引i处,并得到新的Index |
is_monotonic | 将各元素均大于等于前一个元素时,返回True |
is_unique | 将Index没有重复值时,返回True |
unique | 返回Index中唯一的数组 |
最新文章
- jquery的change():下拉框值改变时触发
- python——有限状态机
- C#设计模式(11)——外观模式(Facade Pattern)
- nuget使用
- java 异常2
- 批量kill进程
- 【英语】Bingo口语笔记(1) - Hold
- 关于javaScript注册事件传递参数的浅析
- *[topcoder]JumpFurther
- STL vector 用法介绍
- xcode生成的IOS安装文件的位置
- springmvc继承activemq(原创)
- [Angular Tutorial] 11 -Custom Filters
- mysql中exists、not exists的用法
- Redis的删除机制、持久化 主从
- Docker:从头开始基于CentOS-Minimal安装Docker
- elasticsearch 单机多实例
- java直接量(literal)
- djangobb之forum.topics
- 使用qmlscene预览qml文件
热门文章
- Intellj IDEA14.0.2启动异常之3分钟修复
- Atitit. Derby的使用总结attilax
- Skyscrapers Aren’t Scalable
- js中级四: 跨域
- Prelogin error: host 127.0.0.1 port 1434 Error reading prelogin response: Connection reset ClientConnectionId:26d4b559-c985-4b2e-bd8e-dd7a53b67e48
- Manjaro折腾笔记:我的数据科学环境搭建之路
- Linux Linux程序练习三
- Python Theano 一键安装
- 新MBP使用git命令时启用xcode的终端log
- Laravel5.1 路由 -基础