随书练习,第五章  pandas入门1

# coding: utf-8

# In[1]:

from pandas import Series, DataFrame

# In[2]:

import pandas as pd

# In[3]:

import numpy as np

# In[4]:

obj = Series([4,7,-5,3])

# In[5]:

obj

# In[6]:

obj.values

# In[7]:

obj.index

# In[8]:

obj2 = Series([4,7,-5,3],index=['d','b','a','c'])

# In[9]:

obj2

# In[10]:

obj2.index

# In[11]:

obj2['a']

# In[12]:

obj2['d'] = 6 #给索引'd'位置赋值6

# In[13]:

obj2[['c','a','d']]

# In[14]:

obj2

# In[15]:

obj2[obj2 > 0]

# In[16]:

obj2*2

# In[17]:

np.exp(obj2)

# In[18]:

'b' in obj2 #将Series看做定长有序字典

# In[19]:

'e' in obj2

# In[20]:

sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000} #字典是无序的

# In[21]:

obj3 = Series(sdata)

# In[22]:

obj3

# In[23]:

states = ['California','Ohio','Oregon','Texas']

# In[24]:

obj4 = Series(sdata, index=states)

# In[25]:

obj4

# In[26]:

pd.isnull(obj4) #用于检测缺失数据

# In[27]:

pd.notnull(obj4)

# In[28]:

obj4.isnull()

# In[29]:

obj3

# In[30]:

obj4

# In[31]:

obj3+obj4 #自动对齐不同索引的数据

# In[32]:

obj4.name = 'population'

# In[33]:

obj4.index.name = 'state'

# In[34]:

obj4

# In[35]:

obj.index = ['Bob','Steve','Jeff','Ryan'] #Series索引可以通过赋值的方式就地修改

# In[36]:

obj

# In[37]:

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]: frame # In[39]: DataFrame(data,columns=['year','state','pop']) #指定列顺序 # In[40]: frame2 = DataFrame(data,columns=['year','state','pop','debt'],index=['one','two','three','four','five']) # In[41]: frame2 # In[42]: frame2.columns # In[43]: frame2['state'] #列获取:字典标记方式 # In[44]: frame2.year #列获取:属性方式 # In[45]: frame2.loc['three'] #行获取:利用索引 # In[46]: frame2['debt'] = 16.5 #通过赋值的方式修改列 # In[47]: frame2 # In[48]: frame2['debt'] = np.arange(5) # In[49]: frame2 # In[50]: val = Series([-1.2,-1.5,-1.7],index=['two','four','five']) #将Series赋值给DataFrame的列,精确匹配索引 # In[51]: frame2['debt'] = val # In[52]: frame2 # In[53]: val1 = ([1,2,3,2,1]) # In[54]: frame2['debt'] = val1 #将数组赋值给DataFrame的某一列,长度必须一致 # In[55]: frame2 # In[56]: frame2['eastern'] = frame2.state == 'Ohio' #为不存在的列赋值可以创建一个新列 # In[57]: frame2 # In[58]: del frame2['eastern'] #关键字del用于删除列 # In[59]: frame2.columns # In[60]: pop = {'Nevada':{2001:2.4,2002:2.9},'Ohio':{2000:1.5,2001:1.7,2002:3.6}} #嵌套字典 # In[61]: frame3 = DataFrame(pop) # In[62]: frame3 # In[63]: frame3.T # In[64]: DataFrame(pop,index=[2001,2001,2003]) # In[65]: pdata = {'Ohio':frame3['Ohio'][:-1],'Nevada':frame3['Nevada'][:2]} # In[66]: DataFrame(pdata) # In[67]: frame3.index.name = 'year';frame3.columns.name = 'state' # In[68]: frame3 # In[69]: frame3.values #values属性 # In[70]: frame2.values #各列数据类型不同,选择能兼容所有的类型 # In[71]: obj = Series(range(3),index=['a','b','c']) # In[72]: index = obj.index # In[73]: index # In[74]: index[1:] # In[75]: #index[1] = 'd' #索引不可修改 # In[76]: index = (['x', 'y', 'z']) # In[77]: index # In[78]: index[1] = 'd' # In[79]: index # In[80]: obj.index = (['x', 'y', 'z']) #通过赋值的方式整个可以全部改 # In[81]: obj.index # In[82]: #obj.index[1] = 'd' #索引不可修改 # In[83]: index = pd.Index(np.arange(3)) # In[84]: obj2 = Series([1.5,-2.5,0],index=index) # In[85]: obj2.index is index # In[86]: frame3 # In[87]: 'Ohio' in frame3.columns # In[88]: 2003 in frame3.index # In[89]: frame3.index.is_unique #index的方法和属性 # In[90]: frame3.index.is_monotonic # 当各元素均大于等于前一个元素时,返回True # In[91]: frame3.index.drop([2002]) # In[92]: frame3.index.insert(2,2002) # In[93]: obj = Series([4.5,7.2,-5.3,3.6],index=['d','b','a','c']) # In[94]: obj # In[95]: obj2 = obj.reindex(['a','b','c','d','e']) #Series的重新索引 # In[96]: obj2 # In[97]: obj.reindex(['a','b','c','d','e'],fill_value=0) #缺失值处理 # In[98]: obj3 = Series(['blue','purple','yellow'],index=[0,2,4]) # In[99]: obj3.reindex(range(6),method='ffill') #插值处理(只能按行应用):method选项:ffill或pad向前填充;bfill或backfill向后填充 # In[100]: frame = DataFrame(np.arange(9).reshape((3,3)),index=['a','c','d'],columns=['Ohio','Texas','California']) # In[101]: frame # In[102]: frame2 = frame.reindex(['a','b','c','d']) #DataFrame的重新索引,只传入一个序列,默认为行 # In[103]: frame2 # In[104]: states = ['Texas','Utah','California'] # In[105]: frame.reindex(columns=states) # In[106]: #frame.reindex(index=['a','b','c','d'],method='ffill',columns=states) #行列不能同时重新索引,会报错,或者把method选项去掉也行 # In[107]: frame.loc[['a','b','c','d'],states] # In[108]: obj = Series(np.arange(5),index=['a','b','c','d','e']) # In[109]: new_obj = obj.drop('c') # In[110]: new_obj # In[111]: obj.drop(['d','c']) # In[112]: data = DataFrame(np.arange(16).reshape((4,4)),index=['Ohio','Colorado','Utah','New York'],columns=['one','two','three','four']) # In[113]: data.drop(['Colorado','Ohio']) #默认为行 # In[114]: data.drop('two',axis=1) # In[115]: data.drop(['two','four'],axis=1) # In[116]: #索引、选取、过滤 # In[117]: obj = Series(np.arange(4),index=['a','b','c','d']) #以下是对Series进行索引 # In[118]: obj['b'] #按索引标签 # In[119]: obj[1] #按位置 # In[120]: obj[2:4] #切片,按位置,末端不包含 # In[121]: obj[['b','a','d']] #按索引 # In[122]: obj[[1,3]] # In[123]: obj[obj < 2] # In[124]: obj['b':'c'] # 按照索引标签的切片,末端包含 # In[125]: obj['b':'c'] = 5 # In[126]: obj # In[127]: data = DataFrame(np.arange(16).reshape((4,4)),index=['Ohio','Colorado','Utah','New York'],columns=['one','two','three','four']) # In[128]: data #以下是对DataFrame的索引 # In[129]: data['two'] # In[130]: data[['three','one']] #获取列,因为选取列的操作更常见 # In[131]: data[:2] #按位置索引:通过切片选取行 # In[132]: data[data['three']>5] #通过布尔型数组选取行 # In[133]: data < 5 # In[134]: data[data<5] = 0 # In[135]: data # In[136]: data.loc['Colorado',['two','three']] # In[137]: data.iloc[data.index.get_indexer(['Colorado','Utah']),[3,0,1]] ##天啊,同时选取行列,且一个为标签一个为位置
#For getting multiple indexers, using .get_indexer # In[138]: data.ix[['Colorado','Utah'],[3,0,1]] # In[139]: data.iloc[2] # In[140]: data.loc[:'Utah','two'] #标签,末端包含 # In[141]: data.ix[data.three > 5, :3] # In[142]: s1 = Series([7.3,-2.5,3.4,1.5],index=['a','c','d','e']) # In[143]: s2 = Series([-2.1,3.6,-1.5,4,3.1],index=['a','c','e','f','g']) # In[144]: s1 # In[145]: s2 # In[146]: s1+s2 #自动对齐,缺失值在算数运算中传播 # In[147]: df1 = DataFrame(np.arange(9).reshape((3,3)),columns=list('bcd'),index=['Ohio','Texas','Colorado']) # In[148]: df2 = DataFrame(np.arange(12).reshape((4,3)),columns=list('bde'),index=['Utah','Ohio','Texas','Oregon']) # In[149]: df1 # In[150]: df2 # In[151]: df1+df2 # In[160]: df1 = DataFrame(np.arange(12).reshape((3,4)),columns=list('abcd')) # In[158]: df2 = DataFrame(np.arange(20).reshape((4,5)),columns=list('abcde')) # In[161]: df1 # In[159]: df2 # In[163]: df1 + df2 # In[165]: df1.add(df2, fill_value=0) # In[166]: df1.reindex(columns=df2.columns,fill_value=0) #重新索引 # In[167]: # add加法,sub减法,div除法,mul乘法 # In[169]: arr = np.arange(12).reshape((3,4)) # In[170]: arr # In[171]: arr[0] # In[173]: arr - arr[0] #广播 # In[174]: frame = DataFrame(np.arange(12).reshape((4,3)),columns=list('bde'),index=['Utah','Ohio','Texas','Oregon']) # In[175]: series = frame.iloc[0] # In[176]: frame # In[177]: series # In[178]: frame - series # In[179]: series2 = Series(range(3),index=['b','e','f']) # In[180]: frame + series2 #默认匹配列在行上传播 # In[181]: series3 = frame['d'] # In[182]: frame # In[183]: series3 # In[184]: frame.sub(series3,axis=0) #匹配行在列上广播,传入的轴号是希望匹配的轴 # In[185]: frame = DataFrame(np.random.randn(4,3),columns=list('bde'),index=['Utah','Ohio','Texas','Oregon']) # In[186]: frame # In[187]: np.abs(frame) #函数应用在元素级 # In[188]: f = lambda x:x.max() - x.min() #匿名函数 # In[190]: frame.apply(f) #将函数应用到各行各列所形成的一维数组上 # In[191]: frame.apply(f,axis=1) # In[192]: def f(x):
return Series([x.min(),x.max()],index=['min','max']) #自定义函数,传递给apply的函数还可以返回Series # In[193]: frame.apply(f) # In[194]: format = lambda x: '%.2f'% x # In[199]: frame.applymap(format) # In[200]: frame['e'].map(format) # In[201]: #apply()是一种让函数作用于列或者行操作,applymap()是一种让函数作用于DataFrame每一个元素的操作,而map是一种让函数作用于Series每一个元素的操作 # In[202]: obj = Series(range(4),index=['d','a','b','c']) # In[203]: obj.sort_index() #对索引排序 # In[204]: frame = DataFrame(np.arange(8).reshape((2,4)),index=['three','one'],columns=['d','a','b','c']) # In[205]: frame.sort_index() # In[206]: frame.sort_index(axis=1) #可以对任意轴上索引进行排序 # In[207]: frame.sort_index(axis=1,ascending=False) #降序 # In[208]: obj = Series([4,7,-3,2]) # In[212]: obj.sort_values() # In[213]: obj = Series([4,np.nan,7,np.nan,-3,2]) # In[214]: obj.sort_values() #任何缺失值默认放在末尾 # In[215]: frame = DataFrame({'b':[4,7,-3,2],'a':[0,1,0,1]}) # In[216]: frame # In[218]: frame.sort_values(by='b') # In[221]: frame.sort_values(by=['a','b']) # In[222]: obj = Series([7,-5,7,4,2,0,4]) # In[223]: obj.rank() #method='average' # In[224]: obj.rank(method='first') # In[225]: obj.rank(ascending=False,method='max') # In[226]: frame = DataFrame({'b':[4.3,7,-3,2],'a':[0,1,0,1],'c':[-2,5,8,-2.5]}) # In[227]: frame # In[228]: frame.rank(axis=1)

利用python进行数据分析--pandas入门1的更多相关文章

  1. 利用Python进行数据分析——pandas入门

    利用Python进行数据分析--pandas入门 基于NumPy建立的 from pandas importSeries,DataFrame,import pandas as pd 一.两种数据结构 ...

  2. 利用python进行数据分析--pandas入门2

    随书练习,第五章  pandas入门2 # coding: utf-8 # In[1]: from pandas import Series,DataFrame import pandas as pd ...

  3. 利用Python进行数据分析-Pandas(第一部分)

    利用Python进行数据分析-Pandas: 在Pandas库中最重要的两个数据类型,分别是Series和DataFrame.如下的内容主要围绕这两个方面展开叙述! 在进行数据分析时,我们知道有两个基 ...

  4. 利用Python进行数据分析-Pandas(第六部分-数据聚合与分组运算)

    对数据集进行分组并对各组应用一个函数(无论是聚合还是转换),通常是数据分析工作中的重要环节.在将数据集加载.融合.准备好之后,通常是计算分组统计或生成透视表.pandas提供了一个灵活高效的group ...

  5. 利用Python进行数据分析-Pandas(第四部分-数据清洗和准备)

    在数据分析和建模的过程中,相当多的时间要用在数据准备上:加载.清理.转换以及重塑上.这些工作会占到分析时间的80%或更多.有时,存储在文件和数据库中的数据的格式不适合某个特定的任务.研究者都选择使用编 ...

  6. 利用Python进行数据分析-Pandas(第七部分-时间序列)

    时间序列(time series)数据是一种重要的结构化数据形式,应用于多个领域,包括金融学.经济学.生态学.神经科学.物理学等.时间序列数据的意义取决于具体的应用场景,主要有以下几种: 时间戳(ti ...

  7. 利用Python进行数据分析-Pandas(第五部分-数据规整:聚合、合并和重塑)

    在许多应用中,数据可能分散在许多文件或数据库中,存储的形式也不利于分析.本部分关注可以聚合.合并.重塑数据的方法. 1.层次化索引 层次化索引(hierarchical indexing)是panda ...

  8. 利用Python进行数据分析-Pandas(第三部分)

    访问数据是使用本书所介绍的这些工具的第一步.这里会着重介绍pandas的数据输入与输出,虽然别的库中也有不少以此为目的的工具. 输入输出通常可以划分为几个大类:读取文本文件和其他更高效的磁盘存储格式, ...

  9. 利用Python进行数据分析-Pandas(第二部分)

    上一个章节中我们主要是介绍了pandas两种数据类型的具体属性,这个章节主要介绍操作Series和DataFrame中的数据的基本手段. 一.基本功能 1.重新索引 pandas对象的一个重要方法是r ...

随机推荐

  1. switch条件变量的取值类型

    switch条件变量的取值类型主要有以下六种: 1)JDK1.5(不含JDK1.5)之前只能是byte.short.int.char类型,不能是float.double.long.boolean类型. ...

  2. 软技能-代码外的生存指南PDF下载

    编程只是我们职业生涯中的一部分,我们还需要更多的其他技能 链接:https://pan.baidu.com/s/1d7z_7NCEFT2lsSWO1n-OuA 提取码:zj32 链接失效请留言

  3. [转帖]挖洞经验 | 获取Facebook Marketplace卖家精确地理位置信息

    挖洞经验 | 获取Facebook Marketplace卖家精确地理位置信息 https://www.freebuf.com/vuls/202820.html 知识就是力量 5000刀的一个漏洞. ...

  4. 安装OpenStack计算服务(nova)

    1. 配置数据库 数据库安装在控制节(controller)点上 $ mysql -u root -p 2.创建 glance 数据库 CREATE DATABASE nova; GRANT ALL ...

  5. Linux hostname 主机名篇

    主机名修改(以主机名为config为例) 1.修改文件/etc/sysconfig/network,内容为 [root@config ~]# cat /etc/sysconfig/network# C ...

  6. 背包dp相关

    0/1背包 给出n个物品,每个物品有Vi的价值和Wi的费用,我们总共有m块钱,求最多能得到多少价值的物品. N<=10^3,m<=10^3 记录方案数?记录输出方案? 输出方案: 对每个d ...

  7. [Nest] 01.初见nest.js

    github nest 介绍 Nest 是一个用于构建高效,可扩展的 Node.js 服务器端应用程序的框架.它使用渐进式 JavaScript,内置并完全支持 TypeScript(但仍然允许开发人 ...

  8. 6.css3定位--position

    ⑴Static默认值,没有定位. ⑵Absolute绝对定位.后面的元素会补上原来偏移的位置. ⑶Relative相对定位.后面的元素不会补上原来偏移的位置. ⑷Fixed绝对定位.相对于浏览器窗口固 ...

  9. SpringMVC+Spring4+Mybatis3

    http://blog.csdn.net/jiuqiyuliang/article/details/45286191 http://blog.csdn.net/jiuqiyuliang/article ...

  10. flask基础之一

    flask基础之一 hello world #从flask这个包中导入Flask这个类 #Flask这个类是项目的核心,以后的很多操作都是基于这个类的对象 #注册url,注册蓝图都是这个类的对象 fr ...