本博客为《利用Python进行数据分析》的读书笔记,请勿转载用于其他商业用途。
1、Series
Series是一种一维的数组型对象,它包含了一个值序列,并且包含了数据标签,称为索引(index)。最简单的序列可以仅仅由一个数组形成:
import pandas as pd
obj = pd.Series([4, 7, -5, 3])
print(obj)
#
0 4
1 7
2 -5
3 3
dtype: int64
交互式环境中Series的字符串表示,索引在左边,值在右边。由于不为数据指定索引,默认生成的索引是从0到N-1(N是数据的长度)。我们可以通过values属性和index属性分别获得Series对象的值和索引:
print(obj.values)
print(obj.index)
#
[ 4 7 -5 3]
RangeIndex(start=0, stop=4, step=1)
通常需要创建一个索引序列,用标签标识每个数据点:
obj2 = pd.Series([4, 7, -5, 3], index=['d', 'b', 'a', 'c'])
print(obj2)
print(obj2.index)
#
d 4
b 7
a -5
c 3
dtype: int64
Index(['d', 'b', 'a', 'c'], dtype='object')
与Numpy相比,我们可以在从数据中选择数据的时候使用标签来进行索引:
obj2 = pd.Series([4, 7, -5, 3], index=['d', 'b', 'a', 'c'])
print(obj2['a'])
obj2['d'] = 6
print(obj2[['c', 'a', 'd']])
#
-5
c 3
a -5
d 6
dtype: int64
这里需要注意的是,我们在输出obj2索引为 c、a、d的值时,使用了2个中括号。['c', 'a', 'd']包含的不是数字而是字符串,作为索引列表。
使用Numpy的函数或Numpy风格的操作,比如使用布尔值数组进行过滤,与标量相乘,或是应用数学函数,这些操作将保存索引值链接:
obj2 = pd.Series([4, 7, -5, 3], index=['d', 'b', 'a', 'c'])
print(obj2[obj2 > 0])
print(obj2 * 2)
print(np.exp(obj2))
#
d 4
b 7
c 3
dtype: int64
d 8
b 14
a -10
c 6
dtype: int64
d 54.598150
b 1096.633158
a 0.006738
c 20.085537
dtype: float64
从另一个角度考虑Series,可以认为它是一个长度固定且有序的字典,因为它将索引值的数据值按位置配对。
obj2 = pd.Series([4, 7, -5, 3], index=['d', 'b', 'a', 'c'])
print('b' in obj2)
print('e' in obj2)
#
True
False
如果已经有数据包含在Python字典中,可以使用字典生成一个Series:
sdata = {'Ohio':35000, 'Texas':71000, 'Oregon':16000, 'Utah':5000}
obj3 = pd.Series(sdata)
print(obj3)
#
Ohio 35000
Texas 71000
Oregon 16000
Utah