利用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 ...
随机推荐
- [DS+Algo] 004 栈、队列及其代码实现
1. Stack FILO (FirstInLastOut) 的链表结构 在程序编译环境上使用较多 常用操作 push pop peek is_empty size Python 代码示例 class ...
- 基于webstorm卡顿问题的2种解决方法
基于webstorm卡顿问题的2种解决方法:https://www.jb51.net/article/128441.htm
- P1754球迷购票问题
这是一道动态规划题,其实也是个数论题. 有n人拿50,有n人拿100买票,必须让50元的人买,不然无法找零钱,问最多有几种方案可以每一次都买票成功.这个题首先令人想到搜索,但是随即发现dp是正解,于是 ...
- Python 数据分析:Pandas 缺省值的判断
Python 数据分析:Pandas 缺省值的判断 背景 我们从数据库中取出数据存入 Pandas None 转换成 NaN 或 NaT.但是,我们将 Pandas 数据写入数据库时又需要转换成 No ...
- 剑指offer-删除链表中重复的结点-链表-python ***
题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后 ...
- CSS中:first-child伪类
使用 :first-child 伪类来选择作为某个元素的第一个子元素.这个特定伪类很容易遭到误解,所以有必要举例来说明.考虑以下标记: 如下: html: <div> <p>T ...
- xcode自动生成代码片段
一.什么是代码片段 当在Xcode中输入dowhile并回车后,Xcode会出现下图所示的提示代码: 这就是代码片段,目的是使程序员以最快的速度输入常用的代码片段,提高编程效率.该功能是从Xcode4 ...
- ls, dir, vdir - 列目录内容
ls [选项] [文件名...] POSIX 标准选项: [-CFRacdilqrtu1] GNU 选项 (短格式): [-1abcdfgiklmnopqrstuxABCDFGLNQRSUX] [-w ...
- STM32 时钟系统
1.在 STM32F4 中,有 5 个最重要的时钟源,为 HSI.HSE.LSI.LSE.PLL.其中 PLL 实际是分为两个时钟源,分别为主 PLL 和专用 PLL. 2. ①.LSI 是低速内 ...
- oracle 主键自增并获取自增id
1 创建表 /*第一步:创建表格*/ create table t_user( id int primary key, --主键,自增长 username varchar(20), password ...