pandas模块学习笔记

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xufive/article/details/79147882

1. 前言

虽然很早就接触过pandas模块,却因为深度依赖numpy的原因,从没有认真对待它。今天无意中发现,pandas最初是作为金融数据分析工具而开发出来,有些概念借鉴了R语言。我距离金融圈非常遥远,难怪以前一直找不到使用它的必要性。现在我知道,pandas为时间序列分析提供了很好的支持,这一点也许可以给我的工作提供方便。

模块学习的第一步,自然是安装。必须要感谢pip,自从py2.7.9内置pip之后,世界变得如此美好!

pip install pandas
导入,测试一下模块是否可用。

import pandas as pd

2. 数据结构

网上检索了一下(还是没有认真去读pandas的document),pandas大致有以下几个核心的数据结构:

(1) Series

Series可以理解为一维数组,数组元素可以是不同的类型,甚至是对象——类似python的list对象。不过,Series可以自行定义索引,从这个角度看,又类似python的dict对象。

a = pd.Series()
b = pd.Series([2,5,8])
c = pd.Series([3,'x',b])
d = pd.Series({'name':'xufive','age':50})

Series的方法令人眼花缭乱,简单尝试了一下add,原以为是插入新的元素,结果却是对每一个元素做add,这和numpy.array的广播函数是完全一样的。

>>> b = pd.Series([2,5,8])
>>> b
0    2
1    5
2    8
dtype: int64
>>> b = b.add(8)
>>> b
0    10
1    13
2    16
dtype: int64
>>> b = b.mod(3)
>>> b
0    1
1    1
2    1
dtype: int64阿斯顿

Series有index, values, name, index.name等属性,例如:

>>> b = pd.Series([2,5,8])
>>> b.values
array([2, 5, 8], dtype=int64)
>>> b.index
RangeIndex(start=0, stop=3, step=1)
(2) DataFrame

DataFrame的概念来自于R语言,可视作为Series的容器(container)。DataFrame是表格型数据,既有行索引又有列索引,每列数据可以为不同类型数据(数值、字符串、布尔型值)。

>>> import numpy as np
>>> import pandas as pd
>>> pd.DataFrame({'a':[1,2],'b':[2,3],'c':[3,4],'d':[4,5]})
   a  b  c  d
0  1  2  3  4
1  2  3  4  5
>>> pd.DataFrame(np.array([[1,2,3,4],[3,4,5,6]]),index=['one','two'])
     0  1  2  3
one  1  2  3  4
two  3  4  5  6
>>> pd.DataFrame([pd.Series([11,12,13,14]),pd.Series([21,22,23,24])])
    0   1   2   3
0  11  12  13  14
1  21  22  23  24
DataFrame对象同样有一堆方法来实现分割、查找、替换、转换等功能。在我学习这些细节的时候,深深加剧了我对于R语言的恐惧。为了不给各位看官留下心理阴影,这里就不详细描述了。如有兴趣深入研究,请参考《pandas数据结构》。

3. 时间序列

前言中提到, pandas为时间序列分析提供了很好的支持,那么,我们如何构建一个时间序列的数据结构呢?

>>> index = pd.date_range('1/10/2018', periods=5)
>>> pd.DataFrame(np.random.randn(5, 3), index=index, columns=list('ABC'))
                   A         B         C
2018-01-10 -1.631258 -0.568379  0.319282
2018-01-11 -0.708094  1.107151  1.364287
2018-01-12  0.649978 -0.494478  1.076287
2018-01-13  0.079650 -1.634735  0.794655
2018-01-14  0.330134  0.890559  0.735603






猜你喜欢

转载自blog.csdn.net/xufive/article/details/79147882
今日推荐