利用python进行数据分析--pandas入门1
随书练习,第五章 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的更多相关文章
- 利用Python进行数据分析——pandas入门
利用Python进行数据分析--pandas入门 基于NumPy建立的 from pandas importSeries,DataFrame,import pandas as pd 一.两种数据结构 ...
- 利用python进行数据分析--pandas入门2
随书练习,第五章 pandas入门2 # coding: utf-8 # In[1]: from pandas import Series,DataFrame import pandas as pd ...
- 利用Python进行数据分析-Pandas(第一部分)
利用Python进行数据分析-Pandas: 在Pandas库中最重要的两个数据类型,分别是Series和DataFrame.如下的内容主要围绕这两个方面展开叙述! 在进行数据分析时,我们知道有两个基 ...
- 利用Python进行数据分析-Pandas(第六部分-数据聚合与分组运算)
对数据集进行分组并对各组应用一个函数(无论是聚合还是转换),通常是数据分析工作中的重要环节.在将数据集加载.融合.准备好之后,通常是计算分组统计或生成透视表.pandas提供了一个灵活高效的group ...
- 利用Python进行数据分析-Pandas(第四部分-数据清洗和准备)
在数据分析和建模的过程中,相当多的时间要用在数据准备上:加载.清理.转换以及重塑上.这些工作会占到分析时间的80%或更多.有时,存储在文件和数据库中的数据的格式不适合某个特定的任务.研究者都选择使用编 ...
- 利用Python进行数据分析-Pandas(第七部分-时间序列)
时间序列(time series)数据是一种重要的结构化数据形式,应用于多个领域,包括金融学.经济学.生态学.神经科学.物理学等.时间序列数据的意义取决于具体的应用场景,主要有以下几种: 时间戳(ti ...
- 利用Python进行数据分析-Pandas(第五部分-数据规整:聚合、合并和重塑)
在许多应用中,数据可能分散在许多文件或数据库中,存储的形式也不利于分析.本部分关注可以聚合.合并.重塑数据的方法. 1.层次化索引 层次化索引(hierarchical indexing)是panda ...
- 利用Python进行数据分析-Pandas(第三部分)
访问数据是使用本书所介绍的这些工具的第一步.这里会着重介绍pandas的数据输入与输出,虽然别的库中也有不少以此为目的的工具. 输入输出通常可以划分为几个大类:读取文本文件和其他更高效的磁盘存储格式, ...
- 利用Python进行数据分析-Pandas(第二部分)
上一个章节中我们主要是介绍了pandas两种数据类型的具体属性,这个章节主要介绍操作Series和DataFrame中的数据的基本手段. 一.基本功能 1.重新索引 pandas对象的一个重要方法是r ...
随机推荐
- C语言第十周作业
这个作业属于哪个课程 C语言程序设计 这个作业的要求在哪里 https://edu.cnblogs.com/campus/zswxy/computer-scienceclass3-2018/h ...
- Java第五周作业+总结
实验三 String类的应用 实验目的 掌握类String类的使用: 学会使用JDK帮助文档: 实验内容 1.已知字符串:"this is a test of java".按要求执 ...
- (三)认识twisted reactor
一.reactor是单线程模型,简单粗暴,也就是说网络IO和我们的业务逻辑一般是在一个线程里,其中网络IO通过event loop的方式去异步执行,效率也很高.看下官网的这幅图,比较清晰 twiste ...
- [多校联考2019(Round 5 T2)]蓝精灵的请求(二分图染色+背包)
[多校联考2019(Round 5)]蓝精灵的请求(二分图染色+背包) 题面 在山的那边海的那边住着 n 个蓝精灵,这 n 个蓝精灵之间有 m 对好友关系,现在蓝精灵们想要玩一个团队竞技游戏,需要分为 ...
- 公用flex类
开发过程中,很多布局,用antd的栅格还是不灵活,flex弹性布局会更好用 Flex 是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性. 注意 ...
- Linux系统性能测试工具(八)——网络性能测试工具之netperf
本文介绍关于Linux系统(适用于centos/ubuntu等)的网络性能测试工具-iperf.磁盘io性能测试工具包括: iperf: netperf 参考链接:https://www.jiansh ...
- vscode 黑屏及类名报错解决方案
1.安装vscode之后打开黑屏,解决方案如下图,右键--属性--兼容性--勾选上 2.vscode 类名总报错 是ES2017的语法修饰器引起vscode警告. 解除的方法如果你使用的typescr ...
- 04javascript03
DOM简介 1.获得元素 <!DOCTYPE html> <html> <head> <title>MyHtml.html</title> ...
- 最近关于Qt学习的一点碎碎念
最近关于Qt学习的一点碎碎念 一直在使用Qt,但是最近对Qt的认识更加多了一些.所以想把自己的一些想法记录下来. Qt最好的学习资料应该是官方的参考文档了.对Qt的每一个类都有非常详细的介绍.我做了一 ...
- LAMP架构编译安装过程详解
linux Git 安装 1.安装git依赖包 . yum install -y perl-ExtUtils-MakeMaker package . yum install -y tcl build- ...