python数据处理工具包——pandas简介(如何构建数据结构篇)

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

前言

最近刚开始尝试使用python分析数据,网上很多人都推荐使用pandas,于是自己也去试了试,觉得其功能甚是强大,特别是对于时间序列的处理有很多内置的函数用起来非常方便。这里先简单地介绍一下pandas的数据结构,主要内容来自于《利用Python进行数据分析》。

简单介绍

pandas是基于NumPy构建的,纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。一般通过如下方式引用:

import pandas as pd

所以很多时候都简写为pd了。

pandas的数据结构

在pandas中的数据结构有Series、DataFrame、Panel等。其中Series和DataFrame是最主要的两种数据结构,它们为大多数应用提供了一种可靠的、易于使用的基础。

Series

Series是一维数组,与Numpy中的一维array类似。二者与Python基本的数据结构List也很相近,其区别是:List中的元素可以是不同的数据类型,而Array和Series中则只允许存储相同的数据类型,这样可以更有效的使用内存,提高运算效率。Series可以通过List、Dict或Array等数据结构直接生成。如:

# List to Series
In [2]:obj = pd.Series([4, 7, -5, 3])

In [3]:obj
Out[3]: 
0    4
1    7
2   -5
3    3
dtype: int64

# Dict to Series
In [4]: sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}

In [5]: obj2 = pd.Series(sdata)

In [6]: obj2
Out[6]: 
Ohio      35000
Oregon    16000
Texas     71000
Utah       5000
dtype: int64


# Array to Series
In [8]: data = np.array([1, 3, 5, 7, 9])

In [9]: sdata2 = pd.Series(data)

In [10]: sdata2
Out[10]: 
0    1
1    3
2    5
3    7
4    9
dtype: int32

可以看到pandas在没有给定索引时,会自动生成索引;而像Dict这类给定索引的数据,会沿用原数据的索引。当然我们也可以自己设定索引:

In [12]: obj = pd.Series([4, 7, -5, 3], index=['d', 'b', 'a', 'c'])

In [13]: obj
Out[13]: 
d    4
b    7
a   -5
c    3
dtype: int64

与普通NumPy数组相比,你可以通过索引的方式选取Series中的单个或一组值:

In [15]: obj['a']
Out[15]: -5

In [16]: obj['d'] = 6

In [17]: obj[['c', 'a', 'd']]
Out[17]: 
c    3
a   -5
d    6
dtype: int64

NumPy数组运算(如根据布尔型数组进行过滤、标量乘法、应用数学函数等)都会保留索引和值之间的链接:

In [18]: obj[obj>0]
Out[18]: 
d    6
b    7
c    3
dtype: int64

In [19]: obj*2
Out[19]: 
d    12
b    14
a   -10
c     6
dtype: int64

In [20]: np.exp(obj)
Out[20]: 
d     403.428793
b    1096.633158
a       0.006738
c      20.085537
dtype: float64

DataFrame

如果说Series是一个一维数组型结构,那么DataFrame就是个表格型数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)。DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典(共用同一个索引)。跟其他类似的数据结构相比(如R的data.frame),DataFrame中面向行和面向列的操作基本上是平衡的。其实,DataFrame中的数据是以一个或多个二维块存放的(而不是列表、字典或别的一维数据结构)。
构建DataFrame的办法有很多,最常用的一种是直接传入一个由等长列表或NumPy数组组成的字典:

In [24]: 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 = pd.DataFrame(data)

In [25]: frame
Out[25]: 
   pop   state  year
0  1.5    Ohio  2000
1  1.7    Ohio  2001
2  3.6    Ohio  2002
3  2.4  Nevada  2001
4  2.9  Nevada  2002

可以看到,DataFrame会自动加上索引(跟Series一样),且全部列会被有序排列。如果指定了列序列,则DataFrame的列就会按照指定顺序进行排列:

In [26]: frame = pd.DataFrame(data, columns=['year', 'state', 'pop'])

In [27]: frame
Out[27]: 
   year   state  pop
0  2000    Ohio  1.5
1  2001    Ohio  1.7
2  2002    Ohio  3.6
3  2001  Nevada  2.4
4  2002  Nevada  2.9

通过类似字典标记的方式或属性的方式,可以将DataFrame的列获取为一个Series:

In [28]: frame['state']
Out[28]: 
0      Ohio
1      Ohio
2      Ohio
3    Nevada
4    Nevada
Name: state, dtype: object

具体关于DataFrame如何索引有好几种方法,今后会再开一篇博客详细讲一讲。
关于pandas数据结构的更多内容可以上网查阅或翻阅《利用Python进行数据分析》。

猜你喜欢

转载自blog.csdn.net/wr339988/article/details/64660439