数据结构之--series,DataFrame.use python and pandas for data mining
2016-03-27 13:08
1226 查看
1.好的数据结构是数据分析的基础,一个高效的数据分析方法离不开数据的构造,series and DataFrame是两种高效简单的数据类型。
2.Series是一个一维的类似的数组对象,包含一个数组的数据(任何NumPy的数据类型)和一个与数组关联的数据标签,被成为索引(index),索引显示在左边,值显示在右边,其中索引在不指定的情况下从0到N-1之间自动产生,N是指数据的长度。
l1 = Series([1,3,4,2]) print l1 print type(l1)
OUT
0 1 1 3 2 4 3 2 dtype: int64 <class 'pandas.core.series.Series'>
IN
l1 = Series([1,3,4,2]) print l1.values print l1.index
OUT
[1 3 4 2] Int64Index([0, 1, 2, 3], dtype='int64')
自定义索引
IN
l1 = Series([1,3,4,2],index=['d','g','k','b']) print l1.values print l1.index
OUT
[1 3 4 2] Index([u'd', u'g', u'k', u'b'], dtype='object')
一个值或是多个值的选择
IN:
l1 = Series([1,3,4,2],index=['d','g','k','b']) # print l1.values # print l1.index print l1['d'] print l1[['g','k','b']]
OUT
1 g 3 k 4 b 2 dtype: int64
2.1 说了上面那么多,那么相比于numpy,这种数据究竟有什么不一样的优势呢?——它能在数据计算后保持数据的关联性。
IN
l1 = Series([1,3,4,2],index=['d','g','k','b']) print l1[l1>2] print "*****************" print l1*2 print "*****************" print np.exp(l1)
OUT
g 3 k 4 dtype: int64 ***************** d 2 g 6 k 8 b 4 dtype: int64 ***************** d 2.718282 g 20.085537 k 54.598150 b 7.389056 dtype: float64
从上面看起来,Series是种有序定长的字典
那么python中的字典能不能直接转化为Series呢?of course!
l2 = {'w':1,'ww':2,'wwww':4,'www':3,'wwwwww':6} print l2 l3 = Series(l2) print l3
out
{'ww': 2, 'wwww': 4, 'www': 3, 'wwwwww': 6, 'w': 1} w 1 ww 2 www 3 wwww 4 wwwwww 6 dtype: int64
in
l2 = {'w':1,'ww':2,'wwww':4,'www':3,'wwwwww':6} new_index=['w','ww','wwwww','wwww','wwww'] l3 = Series(l2,index = new_index) print l3
out
w 1 ww 2 wwwww NaN wwww 4 wwww 4 dtype: float64
在这种数据结构中缺失的数据用的NAN表示,在pandas中用函数 isnull 和 notnull 来检测数据丢失。
l2 = {'w':1,'ww':2,'wwww':4,'www':3,'wwwwww':6} new_index=['w','ww','wwwww','wwww','wwww'] l3 = Series(l2,index = new_index) print l3
print "--------------------"
print pd.isnull(l3)
print pd.notnull(l3)
OUT
w 1 ww 2 wwwww NaN wwww 4 wwww 4 dtype: float64
--------------------
w False
ww False
wwwww True
wwww False
wwww False
dtype: bool
w True
ww True
wwwww False
wwww True
wwww True
dtype: bool
这种数据结构可以自动对齐
l1 = Series([1,3,4,2],index=['w','g','k','b']) l2 = {'w':1,'ww':2,'wwww':4,'www':3,'wwwwww':6} new_index=['w','ww','wwwww','wwww','wwww'] l3 = Series(l2,index = new_index) print l1,l3 print l1+l3
out
w 1 g 3 k 4 b 2 dtype: int64 w 1 ww 2 wwwww NaN wwww 4 wwww 4 dtype: float64
b NaN
g NaN
k NaN
w 2
ww NaN
wwww NaN
wwww NaN
wwwww NaN
dtype: float64
series中值和索引的name属性
l1 = Series([1,3,4,2],index=['w','g','k','b']) # l2 = {'w':1,'ww':2,'wwww':4,'www':3,'wwwwww':6} # new_index=['w','ww','wwwww','wwww','wwww'] # l3 = Series(l2,index = new_index) l1.name = 'nameOne' l1.index.name = '1' print l1
OUT
1 w 1 g 3 k 4 b 2 Name: nameOne, dtype: int64
到此关于series的基本用法阐述完毕,如有什么不清楚的可以在下面给我留言,欢迎大家交流。
3. DataFrame数据结构
DataFrame可以看成是一个表格,这个表格是一个经过排序的列表集,这个列表集有中可以有不同的数据类型,行和列的操作基本相等的,关于这种数据结构的理解,请看下面相关的示例
DataFrame的构建
l1 ={"one" :['a','aa','aaaa','aaa','aaaaaa'], "two" :['b','bb','bbbb','bbb','bbbbbb'], "three" :['w','ww','wwww','www','wwwwww']} print l1 print "---------------------------" l2 = DataFrame(l1) print l2
out
{'three': ['w', 'ww', 'wwww', 'www', 'wwwwww'], 'two': ['b', 'bb', 'bbbb', 'bbb', 'bbbbbb'], 'one': ['a', 'aa', 'aaaa', 'aaa', 'aaaaaa']} --------------------------- one three two 0 a w b 1 aa ww bb 2 aaaa wwww bbbb 3 aaa www bbb 4 aaaaaa wwwwww bbbbbb
上面对列分配了索引,并且排序
如何按自己的顺序来排列数据
l1 ={"one" :['a','aa','aaaa','aaa','aaaaaa'], "two" :['b','bb','bbbb','bbb','bbbbbb'], "three" :['w','ww','wwww','www','wwwwww']} l2 = DataFrame(l1) print l2 print "---------------------------" l3 = DataFrame(l1, columns=['three', 'one', 'two']) print l3
out
one three two 0 a w b 1 aa ww bb 2 aaaa wwww bbbb 3 aaa www bbb 4 aaaaaa wwwwww bbbbbb --------------------------- three one two 0 w a b 1 ww aa bb 2 wwww aaaa bbbb 3 www aaa bbb 4 wwwwww aaaaaa bbbbbb
检索行、列
l1 ={"one" :['a','aa','aaaa','aaa','aaaaaa'], "two" :['b','bb','bbbb','bbb','bbbbbb'], "three" :['w','ww','wwww','www','wwwwww']} l2 = DataFrame(l1) print l2.ix[2] print "---------------------------" print l2["two"]
out
one aaaa three wwww two bbbb Name: 2, dtype: object --------------------------- 0 b 1 bb 2 bbbb 3 bbb 4 bbbbbb Name: two, dtype: object
行列数据都能通过赋值改变,可以通过series精确赋值。给不存在的列赋值会创建新的值。任何在series上的修改都会影响DataFrame.
如果一个DataFrame的 index 和 columns 有它们的 name ,也会被显示出来,
l1 ={"one" :['a','aa','aaaa','aaa','aaaaaa'], "two" :['b','bb','bbbb','bbb','bbbbbb'], "three" :['w','ww','wwww','www','wwwwww']} l2 = DataFrame(l1) l2.index.name = 'year' l2.columns.name = 'state' print l2
OUT
state one three two year 0 a w b 1 aa ww bb 2 aaaa wwww bbbb 3 aaa www bbb 4 aaaaaa wwwwww bbbbbb
in
l1 ={"one" :['a','aa','aaaa','aaa','aaaaaa'], "two" :['b','bb','bbbb','bbb','bbbbbb'], "three" :['w','ww','wwww','www','wwwwww']} l2 = DataFrame(l1) l2.index.name = 'year' l2.columns.name = 'state' print l2.values
out
[['a' 'w' 'b'] ['aa' 'ww' 'bb'] ['aaaa' 'wwww' 'bbbb'] ['aaa' 'www' 'bbb'] ['aaaaaa' 'wwwwww' 'bbbbbb']]
索引方法和属性
append 链接额外的索引对象,产生一个新的索引diff 计算索引的差集
intersection 计算交集
union 计算并集
isin 计算出一个布尔数组表示每一个值是否包含在所传递的集合里
delete 计算删除位置i的元素的索引
drop 计算删除所传递的值后的索引
insert 计算在位置i插入元素后的索引
is_monotonic 返回True,如果每一个元素都比它前面的元素大或相等
is_unique 返回True,如果索引没有重复的值
unique 计算索引的唯一值数组
4. series和DataFrame关键特性的使用
在Series上调用 reindex 重排数据,使得它符合新的索引,如果那个索引的值不存在就引入缺失数据值
ll1 = Series([4.5, 7.2, -5.3, 3.6], index=['d', 'b', 'a', 'c']) ll2 = ll1.reindex(['a', 'b', 'c', 'd', 'e']) print ll2
out
a -5.3 b 7.2 c 3.6 d 4.5 e NaN dtype: float64
reindex 的 method(内插)选项,自己去研究,删除条目用.drop()
过滤
obj.ix[val] 从DataFrame的行集选择单行obj.ix[:, val] 从列集选择单列
obj.ix[val1, val2] 选择行和列
reindex 方法 转换一个或多个轴到新的索引
xs 方法 通过标签选择单行或单列到一个Series
icol, irow 方法 通过整数位置,分别的选择单行或单列到一个Series
get_value, set_value 方法 通过行和列标选择一个单值
reference:
http://pda.readthedocs.org/en/latest/chp5.html相关文章推荐
- hdu 3564(线段树+LIS)
- 数据结构之双链表(不带头节点的插入删除打印)
- PAT 浙大数据结构(Reversing Linked List)
- 【HDU5652 BestCoder Round 77 (div1) B】【并查集 or 二分答案BFS】India and China Origins 两国中间出现山脉 最早时间断绝联系
- Kubernetes1.2新特性分析(一)
- 数据结构面试题目
- 数据结构学习笔记(三)二叉树的非递归遍历
- 【Educational Codeforces Round 10D】【树状数组】Nested Segments 每条线段内部有多少条线段
- 小甲鱼数据结构03线性表的顺序存储结构
- 小甲鱼数据结构02谈谈线性表
- 小甲鱼数据结构01之谈谈算法
- Java数据结构的特点
- R语言的基本数据结构
- 数据结构学习笔记(二)多项式加法与乘法
- 基于DFS的求欧拉回路算法
- 以前写的数据结构课设
- 数据结构学习笔记(一)
- python 下的数据结构与算法---6:6大排序算法
- 数据结构与算法——两个大整数的乘积问题
- 排序算法白话实现