快速学习 Python 数据分析包 之 pandas
最近在看时间序列分析的一些东西,中间普遍用到一个叫pandas的包,因此单独拿出时间来进行学习。
参见 pandas 官方文档 http://pandas.pydata.org/pandas-docs/stable/index.html
以及相关博客 http://www.cnblogs.com/chaosimple/p/4153083.html
Pandas介绍
Pandas是python的一个数据分析包,最初由AQR Capital Management于2008年4月开发,并于2009年底开源出来,目前由专注于Python数据包开发的PyData开发team继续开发和维护,属于PyData项目的一部分。Pandas最初被作为金融数据分析工具而开发出来,因此,pandas为时间序列分析提供了很好的支持。
Pandas 是基于 Numpy 构建的含有更高级数据结构和工具的数据分析包,类似于 Numpy 的核心是 ndarray,pandas 也是围绕着 Series 和 DataFrame 两个核心数据结构展开的 。
Series 和 DataFrame 分别对应于一维的序列和二维的表结构。
通常用下列方式来引入需要的包
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
Series
>>> s = pd.Series([1,2,3.0,'a','bc'])
>>> s
0 1
1 2
2 3
3 a
4 bc
dtype: object
Series 对象包含两个主要的属性:index 和 values,分别为上例中左右两列。因为传给构造器的是一个List,所以 index 的值是从 0 起递增的整数,如果传入的是一个类字典的键值对结构,就会生成 index-value 对应的 Series;或者在初始化的时候以关键字参数显式指定一个 index 对象。
>>> s = pd.Series(data=[1,2,3.0,'a','bc'],index = ['a','b','c','d','e'])
>>> s.name = 'example'
>>> s.index.name='New_index'
>>> s
New_index
a 1
b 2
c 3
d a
e bc
Name: example, dtype: object
>>> s.index
Index([u'a', u'b', u'c', u'd', u'e'], dtype='object')
>>> s.values
array([1, 2, 3.0, 'a', 'bc'], dtype=object)
Series 对象的元素会严格依照给出的 index 构建,这意味着:如果 data 参数是有键值对的,那么只有 index 中含有的键会被使用;以及如果 data 中缺少响应的键,即使给出 NaN 值,这个键也会被添加。
注意 Series 的 index 和 values 的元素之间虽然存在对应关系,但这与字典的映射不同。index 和 values 实际仍为互相独立的 ndarray 数组,因此 Series 对象的性能完全 ok。
Series 这种使用键值对的数据结构最大的好处在于,Series 间进行算术运算时,index 会自动对齐。
Series 与 index 都有 name 属性。
DataFrame
DataFrame 的构造方法与 Series 类似,只不过可以同时接受多条一维数据源,每一条都会成为单独的一列
可以通过传递一个能够被转换成类似序列结构的字典对象来创建一个DataFrame
data_dic = ({ 'A' : 1.,
'B' : pd.Timestamp(''),
'C' : pd.Series(1,index=list(range(4)),dtype='float32'),
'D' : np.array([3] * 4,dtype='int32'),
'E' : pd.Categorical(["test","train","test","train"]),
'F' : 'foo' })
df = pd.DataFrame(data_dic)
>>> df
A B C D E F
0 1 2013-01-02 1 3 test foo
1 1 2013-01-02 1 3 train foo
2 1 2013-01-02 1 3 test foo
3 1 2013-01-02 1 3 train foo
虽然data_dic 是个字典,但字典的键 A B C D 并非充当 DataFrame 中的 index 的角色,而是 Series 的 “name” 属性。这里生成的 DataFrame 的index 是 0 1 2 3。
>>> df.index
Int64Index([0, 1, 2, 3], dtype='int64')
>>> df.B
0 2013-01-02
1 2013-01-02
2 2013-01-02
3 2013-01-02
Name: B, dtype: datetime64[ns]
可以通过 df.B 这样的形式访问 A B C D 代表的不同的 Series
也可以通过传递一个numpy array,时间索引以及列标签来创建一个DataFrame
dates = pd.date_range('', periods=6)
df2 = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))
>>> df2
A B C D
2013-01-01 -0.941915 -1.304691 -0.837790 -0.805101
2013-01-02 -0.665522 -2.935955 1.249425 0.902390
2013-01-03 -0.419268 0.750735 -0.547377 -0.075151
2013-01-04 1.362527 -1.059686 -1.564129 -1.267506
2013-01-05 0.719452 -0.152727 0.319914 -0.448535
2013-01-06 -0.863264 -0.548317 0.277112 1.233825
>>> df.index
Int64Index([0, 1, 2, 3], dtype='int64')
>>> df.values
array([[1.0, Timestamp('2013-01-02 00:00:00'), 1.0, 3, 'test', 'foo'],
[1.0, Timestamp('2013-01-02 00:00:00'), 1.0, 3, 'train', 'foo'],
[1.0, Timestamp('2013-01-02 00:00:00'), 1.0, 3, 'test', 'foo'],
[1.0, Timestamp('2013-01-02 00:00:00'), 1.0, 3, 'train', 'foo']], dtype=object)
基本操作
1. head()和tail()查看头和尾部的某几行
>>> df.head(2)
A B C D E F
0 1 2013-01-02 1 3 test foo
1 1 2013-01-02 1 3 train foo >>> df.tail(2)
A B C D E F
2 1 2013-01-02 1 3 test foo
3 1 2013-01-02 1 3 train foo
2. describe()快速统计
>>> df.describe()
A C D
count 4 4 4
mean 1 1 3
std 0 0 0
min 1 1 3
25% 1 1 3
50% 1 1 3
75% 1 1 3
max 1 1 3
3. 转置
>>> df.T
0 1 2 \
A 1 1 1
B 2013-01-02 00:00:00 2013-01-02 00:00:00 2013-01-02 00:00:00
C 1 1 1
D 3 3 3
E test train test
F foo foo foo 3
A 1
B 2013-01-02 00:00:00
C 1
D 3
E train
F foo
4. 按轴排序
>>> df.sort_index(axis=1,ascending=True)
A B C D E F
0 1 2013-01-02 1 3 test foo
1 1 2013-01-02 1 3 train foo
2 1 2013-01-02 1 3 test foo
3 1 2013-01-02 1 3 train foo
>>> df.sort_index(axis=1,ascending=False)
F E D C B A
0 foo test 3 1 2013-01-02 1
1 foo train 3 1 2013-01-02 1
2 foo test 3 1 2013-01-02 1
3 foo train 3 1 2013-01-02 1
5. 按值进行排序
>>> df2.sort(columns='B',ascending=True)
A B C D
2013-01-02 -0.665522 -2.935955 1.249425 0.902390
2013-01-01 -0.941915 -1.304691 -0.837790 -0.805101
2013-01-04 1.362527 -1.059686 -1.564129 -1.267506
2013-01-06 -0.863264 -0.548317 0.277112 1.233825
2013-01-05 0.719452 -0.152727 0.319914 -0.448535
2013-01-03 -0.419268 0.750735 -0.547377 -0.075151
>>> df2.sort(columns='B',ascending=False)
A B C D
2013-01-03 -0.419268 0.750735 -0.547377 -0.075151
2013-01-05 0.719452 -0.152727 0.319914 -0.448535
2013-01-06 -0.863264 -0.548317 0.277112 1.233825
2013-01-04 1.362527 -1.059686 -1.564129 -1.267506
2013-01-01 -0.941915 -1.304691 -0.837790 -0.805101
2013-01-02 -0.665522 -2.935955 1.249425 0.902390
时间序列
Pandas在对频率转换进行重新采样时拥有简单、强大且高效的功能(如将按秒采样的数据转换为按5分钟为单位进行采样的数据)。这种操作在金融领域非常常见。
>>> rng = pd.date_range('1/1/2011', periods=100, freq='S')
>>> rng[:2]
<class 'pandas.tseries.index.DatetimeIndex'>
[2011-01-01 00:00:00, 2011-01-01 00:00:01]
Length: 2, Freq: S, Timezone: None
>>> ts = pd.Series(np.random.randint(0,500,len(rng)),index=rng)
>>> ts.resample('5Min',how='sum')
2011-01-01 28117
Freq: 5T, dtype: int32
日期和时间戳之间的转换
>>> prng = pd.period_range('1990Q1','2000Q4',freq='Q-NOV')
>>> ts = pd.Series(np.random.randn(len(prng)),prng)
>>> ts.head()
1990Q1 0.598308
1990Q2 -0.921216
1990Q3 -1.370614
1990Q4 1.962697
1991Q1 -0.019205
Freq: Q-NOV, dtype: float64
>>> ts.index = (prng.asfreq('M','e')+1).asfreq('H','s')+9
>>> ts.head()
1990-03-01 09:00 0.598308
1990-06-01 09:00 -0.921216
1990-09-01 09:00 -1.370614
1990-12-01 09:00 1.962697
1991-03-01 09:00 -0.019205
Freq: H, dtype: float64
快速学习 Python 数据分析包 之 pandas的更多相关文章
- Python 数据分析包:pandas 基础
pandas 是基于 Numpy 构建的含有更高级数据结构和工具的数据分析包 类似于 Numpy 的核心是 ndarray,pandas 也是围绕着 Series 和 DataFrame 两个核心数据 ...
- 快速入门 Python 数据分析实用指南
Python 现如今已成为数据分析和数据科学使用上的标准语言和标准平台之一.那么作为一个新手小白,该如何快速入门 Python 数据分析呢? 下面根据数据分析的一般工作流程,梳理了相关知识技能以及学习 ...
- Python数据分析工具:Pandas之Series
Python数据分析工具:Pandas之Series Pandas概述Pandas是Python的一个数据分析包,该工具为解决数据分析任务而创建.Pandas纳入大量库和标准数据模型,提供高效的操作数 ...
- Python数据分析入门之pandas基础总结
Pandas--"大熊猫"基础 Series Series: pandas的长枪(数据表中的一列或一行,观测向量,一维数组...) Series1 = pd.Series(np.r ...
- 零基础学习Python数据分析
网上虽然有很多Python学习的教程,但是大多是围绕Python网页开发等展开.数据分析所需要的Python技能和网页开发等差别非常大,本人就是浪费了很多时间来看这些博客.书籍.所以就有了本文,希望能 ...
- 《Python 数据分析》笔记——pandas
Pandas pandas是一个流行的开源Python项目,其名称取panel data(面板数据)与Python data analysis(Python 数据分析)之意. pandas有两个重要的 ...
- python数据分析三剑客之: pandas操作
pandas的操作 pandas的拼接操作 # pandas的拼接操作 级联 pd.concat , pd.append 合并 pd.merge , pd.join 一丶pd.concat()级联 # ...
- Python数据分析库之pandas,你该这么学!No.1
写这个系列背后的故事 咦,面试系列的把基础部分都写完啦,哈哈答,接下来要弄啥嘞~ pandas吧 外国人开发的 翻译成汉语叫 熊猫 厉害厉害,很接地气 一个基于numpy的库 干啥的? 做数据分析用的 ...
- 新手学习Python第三方包库pip安装失败总结
这篇文章纯原创,是之前自己学习使用pyhton时遇到的问题,故在此记录一下. 问题与需求:用python下载第三方库或包的时候出错怎么办? 方法有一下三种,可以解决大部分的问题. 1.在cmd命令控制 ...
随机推荐
- 关于windows2012-远程复制粘贴无效的解决方法
1:在远程桌面中右键点击,选择启动任务管理器,杀掉进程 2:重启服务即可:
- Layer 父子页面之间的交互
父页面获取子页面 var body = layer.getChildFrame('body',index);//建立父子联系 body.find("#parameter").val ...
- C#使用Newtonsoft.Json操作json
1.下载 Newtonsoft.Json 右键引用,选择 管理NuGet程序包,选择浏览,输入log4net,然后点击下载 2.json数据的组装与解析 public class Class { pu ...
- 理解JavaScript普通函数以及箭头函数里使用的this
this 普通函数的this 普通函数的this是由动态作用域决定,它总指向于它的直接调用者.具体可以分为以下四项: this总是指向它的直接调用者, 例如 obj.func() ,那么func()里 ...
- .NET 图片转base64
//图片 转为 base64编码的文本 private string ImgToBase64String(string Imagefilename) { try { Bitmap bmp = new ...
- Docker+Jenkins+Gogs 自动构建.Net Core
Docker+Jenkins+Gogs 自动构建.Net Core 引言 jenkins+gags 全部采用Docker安装,通过jenkins插件ssh调用外部Docker构建 主要实现功能: gi ...
- GoogLeNet InceptionV2/V3/V4
仅用作自己学习 这篇文章中我们会详细讲到Inception V2/V3/V4的发展历程以及它们的网络结构和亮点. GoogLeNet Inception V2 GoogLeNet Inc ...
- mac的idea不能编辑问题
在安装的时候,因为在选择插件的时候,把IDEAVim这个玩意儿选上了.所以,编辑模式就跟命令行里面的Vim一样.输入时,需要先输入i, 进入insert模式下,然后才可以编辑.彻底解决办法就是进入Pr ...
- Vue.js 的几点总结Watchers/router key/render
Vue.js 的几点总结,下面就是实战案例,一起来看一下. 第一招:化繁为简的Watchers 场景还原: 1 2 3 4 5 6 7 8 created(){ this.fetchPostLis ...
- 《图解HTTP》阅读笔记--第六章--HTTP首部
第六章.HTTP首部 <非常重要且恐怖的一章了> HTTP报文=报文首部+(CR+LF)+报文实体 首部字段:HTTP报文首部字段=(首部字段名:字段值)们---类型*4: 通用首部字段( ...