python pandas库的学习笔记一pandas的数据结构
来源:互联网 发布:用友软件服务合同 编辑:程序博客网 时间:2024/05/14 13:02
要使用pandas,首先要熟悉他的两个主要的数据结构:Series和DataFrame。
一、Series
Series 是一种类似于一维数组的对象,由一组数据(各种numpy数据类型)以及一组与之相关的数据标签(即索引)组成。
仅由一组数据即可产生最简单的Series:
>>> from pandas import Series,DataFrame>>> import pandas as pd>>> obj=pd.Series([4,7,-5,3])>>> obj0 41 72 -53 3dtype: int64左边是索引,右边是值,这样看起来Series好像更像dict或map这一类具有键值对的结构。
>>> obj.values #值array([ 4, 7, -5, 3], dtype=int64)>>> obj.index #索引对象RangeIndex(start=0, stop=4, step=1)分别获得值对象与索引对象。
手动指定索引
>>> obj1=Series([4,7,-5,3],index=['a','b','d','c'])>>> obj1a 4b 7d -5c 3dtype: int64通过索引取值:
>>> obj1['a']4>>> obj1[['a','d','b']] #获取多个值a 4d -5b 7dtype: int64数组运算:
>>> obj1[obj1>0]a 4b 7c 3dtype: int64>>> obj1*2a 8b 14d -10c 6dtype: int64既然Series的结构很像dict,自然也可以通过一个dict去创建Series
>>> sdata={'ohio':3500,'Texas':710,'Utah':500}>>> obj2=Series(sdata)>>> obj2Texas 710Utah 500ohio 3500dtype: int64name属性,Series对象本身及其索引都有一个name属性
>>> obj2.index.name='state'>>> obj2.name='population'>>> obj2state #索引名Texas 710Utah 500ohio 3500Name: population, dtype: int64 #Series名
二.DataFrame
DataFrame是一个表格型的数据结构,含有一组有序的列,每列可以是不同的值类型(数值,字符串,布尔值等)。DataFrame既有行索引也有列索引,可以被看做是由Series组成的字典。DataFrame中的数据是以一个或多个二维块存放的。
构建DataFrame
>>> data={'state':['Ohio','Ohio','Ohio','Nevada','Nevada'],'year':[2000,2001,2002,2001,2002],'pop':[1.5,1.7,3.6,2.4,2.9]}>>> frame=DataFrame(data)>>> frame pop state year0 1.5 Ohio 20001 1.7 Ohio 20012 3.6 Ohio 20023 2.4 Nevada 20014 2.9 Nevada 2002结果会自动加上索引,且全部列被有序排列,注意是列被有序排列,即根据列名有序排列。
指定列的顺序
>>> DataFrame(data,columns=['year','state','pop']) year state pop0 2000 Ohio 1.51 2001 Ohio 1.72 2002 Ohio 3.63 2001 Nevada 2.44 2002 Nevada 2.9如果传入的列找不到,则会产生NAN
>>> frame2=DataFrame(data,columns=['year','state','pop','debt'] ,index=['one','two','three','four','five'])>>> frame2 year state pop debtone 2000 Ohio 1.5 NaNtwo 2001 Ohio 1.7 NaNthree 2002 Ohio 3.6 NaNfour 2001 Nevada 2.4 NaNfive 2002 Nevada 2.9 NaN取值,通过类似数组或属性的方式,可以获取某一列的数据(为一个Series)
>>> frame2['state'] #类似数组的方式0 Ohio1 Ohio2 Ohio3 Nevada4 NevadaName: state, dtype: object>>> frame2.year #类似属性的方式0 20001 20012 20023 20014 2002Name: year, dtype: int64注意,返回的Series拥有原DataFrame相同的索引,且其name属性也已经被相应的设置好了。
获取行,行也可以通过位置或名称的方式来进行获取,比如用索引字段ix
>>> frame2.ix[2]year 2002state Ohiopop 3.6debt NaNName: 2, dtype: object列可以通过赋值的方式进行修改。如下,我们可以给空的”debt“列赋值一个标量或一组值。
>>> import numpy as np>>> frame2['dept']=np.arange(5) #为不存在的列赋值会创建一个新列>>> frame2['debt']=12>>> frame2 year state pop debt dept0 2000 Ohio 1.5 12 01 2001 Ohio 1.7 12 12 2002 Ohio 3.6 12 23 2001 Nevada 2.4 12 34 2002 Nevada 2.9 12 4删除,关键词del用于删除列
>>> del frame2['pop']>>> frame2 year state debt dept0 2000 Ohio 12 01 2001 Ohio 12 12 2002 Ohio 12 23 2001 Nevada 12 34 2002 Nevada 12 4另一种常见的数据形式是嵌套字典(也就是字典的字典),将它传给DataFrame,就会被解释为:外层字典的键作为列,内层键作为行索引。
>>> pop={'Nevada':{2001:2.4,2002:2.9},'Ohio':{2000:1.5,2001:1.7, 2002:3.6}}>>> frame3=DataFrame(pop) #使用嵌套字典构造DataFrame>>> frame3 Nevada Ohio2000 NaN 1.52001 2.4 1.72002 2.9 3.6对结果进行 转置:
>>> frame3.T 2000 2001 2002Nevada NaN 2.4 2.9Ohio 1.5 1.7 3.6设置index和columns的name属性:
>>> frame3.index.name='year'>>> frame3.columns.name='state'>>> frame3state Nevada Ohioyear2000 NaN 1.52001 2.4 1.72002 2.9 3.6
可以用于构造DataFrame的数据:
三、索引对象
pandas的索引对象负责管理标签和其他元数据(比如轴名称等)。构建Series或DataFrame时,所用到的任何数组或其他序列的标签都会被转换成一个Index:
>>> obj=Series(range(3),index=['a','b','c'])>>> obj.indexIndex([u'a', u'b', u'c'], dtype='object')Idex对象是不可修改的,因此用户不能对其修改。不可修改性非常重要,因为这样才能使得index对象在多个数据结构之间安全共享:
>>> index=pd.Index(np.arange(3))>>> obj2=Series([1.5,-2.5,0],index=index)>>> obj2.index is indexTrue
index的方法和属性:
参考:
《利用python进行数据分析》
阅读全文
0 0
- python pandas库的学习笔记一pandas的数据结构
- python pandas库的学习笔记二pandas的基本功能
- Pandas学习笔记一(Pandas数据结构)
- python的pandas学习笔记
- [Python] Pandas 学习笔记(一)
- python pandas库的学习笔记三数据操作
- 利用Python Pandas进行数据预处理-Pandas基本的数据结构
- python pandas学习笔记
- python学习笔记一(pandas入门)
- Pandas的数据结构
- python的pandas库里的数据结构介绍
- Pandas学习笔记二(Pandas对象的基本方法)
- 我的python学习笔记(4) pandas 之 Series, DataFrame
- 【python学习笔记】删除pandas DataFrame的某一/几列:
- Python库--pandas库学习笔记总结
- python中pandas库学习笔记
- python中pandas库学习笔记
- python中pandas库学习笔记
- 机器学习-交叉验证
- Java并发编程:volatile关键字解析
- 51nod 1227
- 树莓派Raspbian系统密码设置
- web工程中的web.xml文件有什么作用呢?
- python pandas库的学习笔记一pandas的数据结构
- 《Drools7.0.0.Final规则引擎教程》番外实例篇——相同对象and List使用
- HDU -- 2069 Coin Change 【母函数进阶】
- Freemark基础学习笔记
- 线性回归---Python实现
- Hou Yi's secret(UVALive
- 《leetCode》:Integer to Roman
- 2017年7月工作总结
- days1