利用Python进行数据分析(五)之pandas入门
来源:互联网 发布:腾讯课堂录制软件 编辑:程序博客网 时间:2024/05/20 20:05
pandas入门
pandas毫无疑问是数据分析最基础的库之一。pandas是基于NumPy构建的。本书的作者就是pandas的作者~
引用:
from pandas import Series,DataFrameimport pandas as pd
pandas的数据结构(Series和DataFrame)
Series
Series由一组数据(各种NumPy数据类型)以及一组与之相关的索引组成。仅由一组数据即可产生最简单的Series:
In[4]:obj = Series([4,7,-5,3])In[5]:obj0ut[5]:0 41 72 -53 3
你也可以通过values和index属性来获取值和索引:
In [6]:obj.valuesOut[6]:array([4,7,-5,3])In[7]:obj.indexOut[7]:Int64Index([o,1,2,3])
当然你可以指定索引,而不是默认的0~(length-1):
In [8]:obj2 = Series([4,7,-5,3],index=['d','b',‘a','c'])In[9]:obj20ut[9]:d 4b 7a -5c 3In[10]:obj2.index0ut[10]:Index([d,b,a,c],dtype=object)
建立完了,当然要会怎么获取值啦:
In[11]:obj2['a']0ut[11]:-5In[12]:obj2['d'] = 6In [13]:obj2[['c',‘a',‘d']]0ut[13]:c 3a -5d 6
NumPy数组运算都会保留索引和值之间的链接。
你很容易联想到有序字典,比如:
In [18]:'b'in obj20ut[18]:TrueIn [19]:'e'in obj20ut[19]:False
或者:
In [20]:sdata={'ohio':35000,‘Texas':71000,‘0regon':16000,‘Utah':5000}In[21]:obj3=Series(sdata)In[22]:obj3out[22]:ohio 350000regon 16000Texas71000Utah 5000
In[23]:states = ['California','Ohio',‘Oregon','Texas']In[24]:obj4 = Series(sdata,index=states)In [25]:obj40ut[25]:California NaNOhio 350000regon 16000Texas 71000#可以理解为先建立index,全为NaN(not a number),然后把前面数组的值填到相应的索引下去。
用pandas的 isnull和notnull可检测缺失数据。
pd.innull(obj4) pd.notnull(obj4) obj4.isnull()返回索引+值(bool)
Series的自动对齐不同索引的数据被许多的应用来使用:
In[29]:obj3 In[30]:obj4Out[29]: Out[30]:Ohio 35000 California NaN0regon 160000 hio 35000Texas 710000 regon 16000Utah 5000 Texas 71000In [31]:obj3+obj40ut[31]:California NaNOhio 70000Oregon 32000Texas 142000Utah NaN#Utah得到NaN比较特殊
Series对象本身及其索引都有一个name属性,该属性跟pandas其他的关键功能关系非常密切:
In [32]:obj4.name=‘population'In[33]:obj4.index.name='state'In [34]:obj40ut[34]:stateCalifornia NaN0hio350000regon16000Texas71000Name:population
Series的索引可以通过赋值的方式就地修改:
In [35]:obj.index=['Bob','Steve','Jeff','Ryan']In [36]:objout[36]:Bob 4Steve 7Jeff -5Ryan 3
DataFrame
应该可以这么理解,DataFrame在pandas里就像表格一样的二维结构。(注意:虽然DataFrame是以二维结构保存数据的,但你仍然可以轻松地将其表示为更高维度的数据(层次化索引的表格型结构,这是pandas中许多高级数据处理功能的关键要素))
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)In[38]:frame0ut[38]: pop state year0 1.5 Ohio 20001 1.7 Ohio 20012 3.6 Ohio 20023 2.4 Nevada 20014 2.9 Nevada 2002
In [40]:frame2 = DataFrame(data,columns=['year','state',‘pop','debt'],index = ['one','two','three','four','five'])In [41]:frame20ut[41]: 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#通过columns可以指明列顺序,没有值则为NaN
通过frame2[‘state’]或者frame2.state可获取到Series:
one Ohiotwo Ohiothree Ohiofour Nevadafive NevadaName:state
frame2.ix[‘three’] :索引字段ix
frame2[‘debt’] = 16.5 :列赋值
frame2[‘debt’] = np.arange(5.) :debt赋值0-4,长度要匹配。
val = Series([-1.2,-1.5,-1.7],index=[‘two’,’four’,’five’])
frame2[‘debt’] = val : 赋值Series,匹配索引,其他的会填上NaN
给不存在的列赋值会创建列,然后del用于删除列,如下:
In [53]:frame2['eastern']=frame2.state=='Ohio'In[54]:frame20ut[54]: year state pop debt easternone 2000 Ohio 1.5 NaN Truetwo 2001 Ohio 1.7 -1.2 Truethree 2002 Ohio 3.6 NaN Truefour 2001 Nevada 2.4 -1.5 Falsefive 2002 Nevada 2.9 -1.7 FalseIn [5s]:del framez['eastern']In [56]:frame2.columns0ut[56]:Index([year,state,pop,debt],dtype=object)
同样的,通过索引方式返回的列只是相应数据的视图而已,并不是副本。因此,对返回的Series所做的任何就地修改全都会反映到源DataFrame上。通过Series的copy方法即可显式地复制列。
另外一种常见的数据形式是嵌套字典:
In [57]:pop={'Nevada':{2001:2.4,2002:2.9}, 'Ohio':{2000:1.5,2001:1.7,2002:3.6}}
如果将它传给DataFrame,它就会被解释为:外层字典的键作为列,内层键则作为行
索引(也可以显示指定索引):
In [58]:frame3=DataFrame(pop)In [59]:frame30ut[59]: Nevada Ohio2000 NaN 1.52001 2.4 1.72002 2.9 3.6
然后 你还可以转置:
fram3.T
得到的是:
2000 2001 2002
Nevada NaN 2.4 2.9
Ohio 1.5 1.7 3.6
In[62]:pdata={'ohio':frame3['ohio'][:-1], Nevada':frame3['Nevada][:2]}In [63]:DataFrame(pdata)Out[63]: Nevada Ohio2000 NaN 1.52001 2.4 1.7
([:-1]代表0到最后一个 但是左闭右开哈)
可以输入给DataFrame的数据(很多都支持。。。)
也可以直接设置DataFrame的index和columns的name属性,同样frame3.values返回的是二维ndarray的形式。
索引对象
In[68]:obj = Series(range(3),index=['a','b','c'])In[69]:index = obj.indexIn[7o]:indexout[7o]:Index([a,b,c],dtype=object)In[71]:index[1:]out[71]:Index([b,c],dtype=object)#Index对象是不可修改的(immutable),因此用户不能对其进行修改:In[72]:index[1]='d'#抛出异常
不可修改性非常重要,因为这样才能使Index对象在多个数据结构之间安全共享:
In[73]:index = pd.Index(np.arange(3))In[74]:obj2 = Series([1.5,-2.5,0],index=index)In[75]:obj2.index is indexOut[75]:True
表5-2:pandas中主要的Index对象
表5-3:Index的方法和属性
总结:主要讲的是pandas的数据结构(Series和DataFrame),感觉DataFrame就是二维的Series,很多方法和理解都是相通的。DataFrame在之后的使用过程中应该会非常频繁的使用到。
- 利用Python进行数据分析(五)之pandas入门
- 利用Python数据分析:pandas入门(五)
- 利用python进行数据分析-pandas入门
- 利用Python进行数据分析(六)之pandas基本功能
- 利用Python进行数据分析——pandas入门(五)(4)
- 利用python进行数据分析-pandas入门2
- 利用python进行数据分析-pandas入门3
- 利用 Python 进行数据分析(十二)pandas:数据合并
- 利用 Python 进行数据分析(十二)pandas:数据合并
- 利用Python 的 Pandas进行数据分析
- 《利用Python 进行数据分析》pandas 总结
- 利用Python数据分析:pandas入门(四)
- 利用Python数据分析:pandas入门(六)
- 利用Python进行数据分析(六)之pandas基本功能续
- 利用Python数据分析:pandas入门(一)
- 利用Python数据分析:pandas入门(二)
- 利用Python数据分析:pandas入门(三)
- pandas入门 《利用Python进行数据分析》读书笔记 第5章
- 通过xshell登录linux重启tomcat服务器
- 织梦dedecms自定义表单中设置必填项的方法
- Linux 断点续传文件
- 面向对象:如果你喜欢运动、英语、阅读、艺术设计、烹饪等,那不管是做朋友还是恋爱结婚,都将是我莫大的荣幸!
- Python中类似于Matlab中的X(X==condition)语句
- 利用Python进行数据分析(五)之pandas入门
- mybatis官网参考文档-XML配置_插件(plugins)(版本: 3.4.6-SNAPSHOT)
- 【11-15】LeetCode:Python解题
- DrawbleLyout的条目监听事件
- OpenStack+Ceph+热迁移+++三、各节点解析与基本设置
- sizeof,if和switch,const和define···
- C++ const修饰函数、函数参数、函数返回值
- 欢迎使用CSDN-markdown编辑器
- ubuntu 启动服务