pandas是后续内容的首选库。它含有使数据清洗和分析工作变得更快更简单的数据结构和操作工具。
在后续部分中,我将使用下面这样的pandas引入约定:
import pandas as pd
要使用pandas,你首先就得熟悉它的两个主要数据结构:Series和DataFrame。虽然它们并不能解决所有问题,但它们为大多数应用提供了一种可靠的、易于使用的基础。
Series由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)组成。仅由一组数据即可产生最简单的Series
obj = pd.Series([4, 7, -5, 3])
obj
out
0 4
1 7
2 -5
3 3
dtype: int64
可以通过Series 的values和index属性获取其数组表示形式和索引对象
obj.values
out
array([ 4, 7, -5, 3], dtype=int64)
**************************************************
obj.index
out
RangeIndex(start=0, stop=4, step=1)
通常,我们希望所创建的Series带有一个可以对各个数据点进行标记的索引
obj2 = pd.Series([4, 7, -5, 3],index=['a', 'b', 'c', 'd'])
obj2
out
a 4
b 7
c -5
d 3
dtype: int64
**********************************************************
obj2.index
out
Index(['a', 'b', 'c', 'd'], dtype='object')
与普通NumPy数组相比,你可以通过索引的方式选取Series中的单个或一组值
obj2['a']
out
*************************************
obj2['d']
out
3
使用NumPy函数或类似NumPy的运算(如根据布尔型数组进行过滤、标量乘法、应用数学函数等)都会保留索引值的链接:
obj2[obj2 >0]
out
a 4
b 7
d 3
dtype: int64
*************************************
obj2 * 2
out
a 8
b 14
c -10
d 6
dtype: int64
*************************************
import numpy as np
np.exp(obj2) #返回e的幂次方,
out
a 54.598150
b 1096.633158
c 0.006738
d 20.085537
dtype: float64
还可以将Series看成是一个定长的有序字典,因为它是索引值到数据值的一个映射。
"b" in obj2
out
True
*************************
"e" in obj2
out
False
如果数据被存放在一个Python字典中,也可以直接通过这个字典来创建Series:
sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
obj3 = Series(sdata)
obj3
out
Ohio 35000
Texas 71000
Oregon 16000
Utah 5000
dtype: int64
如果只传入一个字典,则结果Series中的索引就是原字典的键(有序排列)。
states = ['California', 'Ohio', 'Oregon', 'Texas']
obj4 = pd.Series(sdata, index=states)
obj4
out
California NaN
Ohio 35000.0
Oregon 16000.0
Texas 71000.0
dtype: float64
我将使用缺失(missing)或NA表示缺失数据。pandas的isnull和notnull函数可用于检测缺失数据:
pd.isnull(obj4)
out
California True
Ohio False
Oregon False
Texas False
******************************
pd.notnull(obj4)
out
California False
Ohio True
Oregon True
Texas True
dtype: bool
Series也有类似的实例方法:
obj4.isnull()
out
California True
Ohio False
Oregon False
Texas False
dtype: bool
*********************************
obj4.notnull()
out
California False
Ohio True
Oregon True
Texas True
dtype: bool
对于许多应用而言,Series最重要的一个功能是,它会根据运算的索引标签自动对齐数据
obj3 + obj4
out
California NaN
Ohio 70000.0
Oregon 32000.0
Texas 142000.0
Utah NaN
dtype: float64
Series对象本身及其索引都有一个name属性,该属性跟pandas其他的关键功能关系非常密切
obj4.name = 'population'
obj4.index.name = 'state'
obj4
out
state
California NaN
Ohio 35000.0
Oregon 16000.0
Texas 71000.0
Name: population, dtype: float64
Series的索引可以通过赋值的方式就地修改:
obj.index = ['Bob', 'Steve', 'Jeff', 'Ryan']
obj
out
Bob 4
Steve 7
Jeff -5
Ryan 3
dtype: int64
下期我们将分享Pandas中的另一个数据结构--DataFrame,如果喜欢请点赞收藏,您的支持是我最大的动力,谢谢大家,共同进步。