Python -- pandas
来源:互联网 发布:爱塔传奇 唐大华知乎 编辑:程序博客网 时间:2024/05/29 11:18
标签(空格分隔): Python
数据结构
#首先引入需要使用的模块from pandas import Series, DataFrameimport pandas as pd
Series
Series类似于一维数组的对象,由一组数据以及一组与之相关的数据标签组成。传入一个数组,将会创建一个0-N-1的整数型索引。
In[]: obj = Series([2,3,4,-3])In[]: obj.valuesIn[]: obj.indexIn[]: obj = Series([2,3,4,-3], index=['d', 'b', 'a', 'c']) # 为键值指定索引In[]: obj['a'] #取出相应索引位置的值In[]: obj[obj > 0]In[]: obj * 2In[]: np.exp(obj)In[]: 'b' in objIn[]: sdata = {'Ohio' : 35000, 'Texas' : 71000, 'Oregen' : 16000, 'Utath' : 5000} # 创建一个词典In[]: obj2 = Series(sdata) # 用字典创建SeriesIn[]: states = ['California', 'Oregen', 'Utath', 'Ohio', 'Texas']In[]: obj3 = Series(sdata, index = states) # 缺失值用NA表示In[]: pd.isnull(obj3) # 检测缺失值In[]: obj.isnull()In[]: obj3.name = 'population' # 指定表的名字In[]: obj3.index.name = 'state' # 指定列的名字
DataFrame
DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型。既有行索引,又有列索引。DataFrame中面向行的和面向列的操作基本是平衡的,它的数据是由一个或多个二维块存放的。
In[]: data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada'], 'year' : [2000, 2001, 2002, 2001, 2002], 'pop': [1.5, 1.7, 3.6, 2.4, 2.9]}In[]: frame = DataFrame(data)In[]: DataFrame(data, clolumns = ['state', 'pop', 'year']) # DataFrame的列按照指定的顺序排序In[]: frame2 = DataFrame(data, columns = ['year', 'state', 'pop', 'debt'], index=['one', 'two', 'three', 'four', 'five']) # 如果指定的列在原数据中找不到,则用NA填充In[]: frame2['eastern'] = frame2.state == 'Ohio'In[]: del frame2['earstern']In[]: pop = {'Nevada' : {2001:2.4, 2002:2.9}, 'Ohio' : {2000:1.5, 2002:3.6}} # 用嵌套字典创建DataFrame,外层字典的键作为列,内层键作为行索引In[]: frame3 = DataFrame(pop)
索引对象
pandas的索引对象负责管理轴标签和其他元数据。index对象是不可以修改(immutable)的。
In[]: obj = Series(range(3), index = ['a', 'b', 'c'])In[]: index = obj.indexIn[]: index[1:]In[]: index[1] = 'f' # 测试一下能不能修改In[]: index = pd.Index(np.arange(3))In[]: obj = Series([1.5, -2.5, 0], index = index)In[]: obj.index = indexIn[]: index is obj.index # True
pandas中主要的index对象:
index的方法和属性:
重新检索:
In[]: obj = Series([4.5, 7.2, -5.3, 3.6], index = ['d', 'b', 'a', 'c'])In[]: obj2 = obj.reindex(['a', 'b', 'c', 'd', 'e'], fill_value = 0) # 不存在的index用o填充In[]: obj3 = Series(['blue', 'purple', 'yellow'], index = [0,2,4])In[]: obj3.reindex(range(6), method = 'ffill')
reindex的插值的method选项:
reindex函数的参数:
* 丢弃指定轴上的数据:
# Sereis中的drop()操作In[]: obj = Series(np.arange(5), index=['a', 'b', 'c', 'd', 'e'])In[]: new_obj = obj.drop('a')In[]: obj.drop(['a', 'b'])# DataFrame中的drop()操作In[]: data = DataFrame(np.arange(16).reshape((4, 4)), index = ['a', 'b', 'c', 'd'], columns = ['one', 'two', 'three', 'four'])In[]: data.drop(['a', 'b'])In[]: data.drop(['one', 'four'], axis = 1)
索引、选取和过滤
Series索引(obj[…])的工作方式与Numpy中的数组索引类似,只不过Series的索引值不只是整数。
# Sereis中的索引和切片操作In[]: obj = Series(np.arange(4), index=['a','b','c','d'])In[]: obj['b'] # 1In[]: obj[1] # 1In[]: obj[2:4] # c 2 d 3In[]: obj[['a', 'c']] # 0 2In[]: obj[obj < 2] # a 0 b 1In[]: obj['b':'c'] # b 1 c 2(该切片是包含末端的!!)In[]: obj['b':'c'] = 5 # 将索引为b->c的设置为5# DataFrame中的索引和切片操作In[]: data = DataFrame(np.arange(16).reshape(4, 4), index=['Ohio', 'Colorado', 'Utah', 'New York'], columns=['1', '2', '3', '4'])In[]: data.ix['Colorado', ['2', '3']] # **使用ix进行行索引**In[]: data.ix[data.3 > 5, :3]
DataFrame的索引选项:
算术运算和数据对齐
In [62]: s1 = Series([7.3,-2.5,3.4,1.5], index=['a', 'c', 'd', 'e'])In [63]: s2 = Series([-2.1, 3.6,-1.5,4,3.1], index=['a', 'c', 'e', 'f', 'g'])In [64]: s1Out[64]: a 7.3c -2.5d 3.4e 1.5dtype: float64In [65]: s2Out[65]: a -2.1c 3.6e -1.5f 4.0g 3.1dtype: float64In [66]: s1 + s2Out[66]: a 5.2c 1.1d NaNe 0.0f NaNg NaNdtype: float64In [67]: df1 = DataFrame(np.arange(9.).reshape((3,3)), columns=list('bcd'), index=['Ohio', 'Texas', 'Colorado'])In [68]: df2 = DataFrame(np.arange(12.).reshape((4,3)), columns=list('bde'), index=['Utah', 'Ohio', 'Texas', 'Oregon'])In [69]: df1Out[69]: b c dOhio 0.0 1.0 2.0Texas 3.0 4.0 5.0Colorado 6.0 7.0 8.0In [70]: df2Out[70]: b d eUtah 0.0 1.0 2.0Ohio 3.0 4.0 5.0Texas 6.0 7.0 8.0Oregon 9.0 10.0 11.0In [71]: df1 + df2Out[71]: b c d eColorado NaN NaN NaN NaNOhio 3.0 NaN 6.0 NaNOregon NaN NaN NaN NaNTexas 9.0 NaN 12.0 NaNUtah NaN NaN NaN NaNIn[]: df1.add(df2, fill_value=0) # 两个矩阵相加,没有值的位置填入0补充In[]: df1.reindex(columns = df2.columns, fill_value=0)In[]: f = lambda x: x.max() - x.min()In[]: frame.apply(f)In [98]: def f(x):...: return Series([x.min(), x.max()], index=['min', 'max'])...: In [99]: frame.apply(f)Out[99]: b d emin -2.789435 -0.110705 -1.101437max 0.653851 1.258250 1.592027In[]: format = lambda x: '%2.f' % xIn[]: frame.applymap(format) # for DataFrameIn[]: frame['b'].map(format) # for Series
排序和排名
根据条件对数据集排序,要对行或列索引进行排序,使用index_sort方法进行排序。
In[]: obj = Series(range(4), index=['b', 'a', 'c', 'd'])In[]: obj.sort_index()In [109]: frame = DataFrame(np.arange(8).reshape((2, 4)), index=['three','one'], columns=list(' ...: dabc'))In [110]: frameOut[110]: d a b cthree 0 1 2 3one 4 5 6 7In [111]: frame.sort_index()Out[111]: d a b cone 4 5 6 7three 0 1 2 3In[]: frame.sort_index(axis=1, ascending=False)In[]: obj = Series([4,7,-3,2])In[]: obj.order() # 任何缺失值会被方法哦Series末尾In [119]: frame = DataFrame({'b':[4,7,-3,2], 'a':[0,1,0,1]})In [120]: frameOut[120]: a b0 0 41 1 72 0 -33 1 2In [121]: frame.sort_index(by='b')Out[121]: a b2 0 -33 1 20 0 41 1 7
汇总和计算描述统计
约简方法的选项:
相关系数与协方差
import pandas.io.data as weball_data = {}for ticker in ['AAPL', 'IBM', 'MSFT', 'GOOG']: all_data[ticker] = web.getd_data_yahoo(ticker, '1/1/2000', '1/1/2010')price = DataFrame({tic:data['Adj Close'] for tic, data in all_data.iteritems()})volume = DataFrame({tic:data['Volume'] for tic, data in all_data.iteritems()})In[]: returns = price.pct_change()In[]: returns.tail()In[]: returns.MSFT.corr(returns.IBM) # 计算Series的相关系数In[]: returns.MSFT.cov(returns.IBM) # 计算Series的协方差In[]: returns.corr() # 计算DataFrame的相关系数In[]: returns.cov() # 计算DataFrame的协方差
唯一值、值计数及成员资格
In[]: obj = Series(['c', 'a', 'd', 'a', 'a', 'b', 'b', 'c', 'c'])In[]: unique = obj.unique()In[]: obj.value_counts()
处理缺失数据
In[]: df = DataFrame(np.random.randn(3, 7))In[]: from numpy import nan as NAIn[]: df.ix[:4, 4] = NA; df.ix[:2, 2] = NAIn[]: df.fillna(0) # 将所有的nan值替换为0In[]: df.fillna({1:0.5, 3:-1})In[]: df.fillna(method = 'ffill', limit=2)In[]: data = Series([1., NA, 7., NA, 3.5])In[]: data.ffill(data.mean()) # 用数组的均值填充(很有用哦)
fillna
函数的参数
层次化索引(hierarchical indexing)
它使我们能够在一个轴上拥有多个索引级别。
In [35]: data = Series(np.random.randn(10), index=[['a','a','a','b','b','b','c','c','d','d'],[1...: ,2,3,1,2,3,1,2,2,3]])In [36]: dataOut[36]: a 1 -0.335981 2 -1.771950 3 0.847548b 1 1.806644 2 -0.550041 3 0.409235c 1 1.429005 2 1.111154d 2 -0.769956 3 1.675767dtype: float64In [37]: data.indexOut[37]: MultiIndex(levels=[[u'a', u'b', u'c', u'd'], [1, 2, 3]], labels=[[0, 0, 0, 1, 1, 1, 2, 2, 3, 3], [0, 1, 2, 0, 1, 2, 0, 1, 1, 2]])In[]: data['a']In[]: data.ix[['a', 'c']]In[]: data['b': 'd']In [50]: data[:, 1] # 对内层进行索引,显示Out[50]: a -0.335981b 1.806644c 1.429005# 用unstack将多层索引Series映射到一个DataFrame中In [51]: data.unstack()Out[51]: 1 2 3a -0.335981 -1.771950 0.847548b 1.806644 -0.550041 0.409235c 1.429005 1.111154 NaNd NaN -0.769956 1.675767#用stack()将DataFrame重新索引到一个Series中In [52]: data.unstack().stack()Out[52]: a 1 -0.335981 2 -1.771950 3 0.847548b 1 1.806644 2 -0.550041 3 0.409235c 1 1.429005 2 1.111154d 2 -0.769956 3 1.675767In [53]: df = DataFrame(np.arange(12).reshape(4,3), index = [['a','a','b','b'],[1,2,1,2]], colu ...: mns = [['Ohio','Ohio', 'Colorado'], ['Green', 'Red', 'Green']])In [54]: dfOut[54]: Ohio Colorado Green Red Greena 1 0 1 2 2 3 4 5b 1 6 7 8 2 9 10 11In [55]: df.index.names = ['key1', 'key2']In [56]: dfOut[56]: Ohio Colorado Green Red Greenkey1 key2 a 1 0 1 2 2 3 4 5b 1 6 7 8 2 9 10 11# 重新分级排序In [63]: df.swaplevel('key1', 'key2')Out[63]: state Ohio Coloradocolor Green Red Greenkey2 key1 1 a 0 1 22 a 3 4 51 b 6 7 82 b 9 10 11
0 0
- python pandas
- python-pandas
- python pandas
- Python -- pandas
- Python - Pandas
- python-pandas
- Python pandas
- python pandas
- Python----Pandas
- python-pandas
- Python中的pandas模块
- Python Pandas基础1
- Python pandas基础2
- python pandas基础3
- Python安装pandas,matplotlib
- python之pandas说明
- python中的pandas包
- python中安装pandas
- drools 6.5 -规则引擎入门
- 正确理解差异的“专业意义”与“统计学意义”
- jface databinding: Radio Button group及ISideEffect绑定数据对象的例子
- Angular2文档学习的知识点摘要——架构概览、根模块
- 设计模式系列之十三代理模式
- Python -- pandas
- 21、(知识篇)Mybatis02使用(嵌套结果/嵌套查询)
- Leetcode Merge Two Sorted Lists(合并两个有序表)
- android操作SQLite数据库
- C语言与汇编语言混合编程
- JsonCpp遍历json
- 利用matlab对彩色图像进行取反
- 我的博客搭建之git的使用
- [leetCode]53. Maximum Subarray&&动态规划