操作Series对象
Series对象的访问
上述内容对Series对象索引和值的访问有了简单介绍,接下来讲解对Series对象内容的访问,具体示例如下所示:
In [1]: import numpy as np
In [2]: import pandas as pd
In [3]: se2 = pd.Series(np.arange(6))
In [4]: s1 = se2[2]
In [5]: s2 = se2[[1,3]]
In [6]: s3 = se2.values
In [7]: s4 = se2.index
上述代码是访问Series对象,其中In [4]是访问se2中索引值为2的元素值,并将返回结果赋值给变量s1;In [5]是访问se2中索引值为1和3的元素值,并将返回结果赋值给变量s2;In [6]是访问se2中所有元素值,并将返回结果赋值给变量s3;In [7]是访问se2中所有索引值,并将返回结果赋值给变量s4。各变量的运行结果如下所示:
In [8]: se2
Out[8]:
0 0
1 1
2 2
3 3
4 4
5 5
dtype: int32
In [9]: s1
Out[9]: 2
In [10]: s2
Out[10]:
1 1
3 3
dtype: int32
In [11]: s3
Out[11]: array([0, 1, 2, 3, 4, 5])
In [12]: s4
Out[12]: RangeIndex(start=0, stop=6, step=1)
从上述运行结果可看出,Pandas对Series对象的访问可以直接根据索引值来访问,也可一次访问多个元素,还可直接使用values和index来访问Series对象的所有数据值和索引值。
Series的简单运算
Series保留了NumPy的数组操作(用布尔数组过滤数据,标量乘法及数学函数的使用),并同时保持索引的使用。具体示例如下所示:
In [1]: import numpy as np
In [2]: import pandas as pd
In [3]: se = pd.Series(np.arange(6),index=['a','b','c','d','e','f'])
In [4]: se1 = se[se > 2]
In [5]: se2 = se * 2
In [6]: se3 = np.exp(se)
上述代码是Series的简单计算,其中In [3]是创建Series,并设置索引,最后将其赋值给变量se;In [4]是计算se中大于2的元素,并将计算结果赋值给变量se1;In [5]是将se中元素乘以2,并将计算结果赋值给变量se2;In [6]是使用NumPy中的数学函数exp()(计算以e为底,se中各元素为指数的值),并将计算结果赋值给变量se3。各变量的运行结果如下所示:
In [7]: se
Out[7]:
a 0
b 1
c 2
d 3
e 4
f 5
dtype: int32
In [8]: se1
Out[8]:
d 3
e 4
f 5
dtype: int32
In [9]: se2
Out[9]:
a 0
b 2
c 4
d 6
e 8
f 10
dtype: int32
In [10]: se3
Out[10]:
a 1.000000
b 2.718282
c 7.389056
d 20.085537
e 54.598150
f 148.413159
dtype: float64
从上述运行结果可看出,Series对象可使用NumPy中简单的运算。
Series的命名
Series对象本身及索引都有一个name属性,可通过此属性来给Series对象或索引命名,具体示例如下所示:
In [17]: import numpy as np
In [18]: import pandas as pd
In [19]: se = pd.Series(np.arange(6),index=['a','b','c','d','e','f'])
In [20]: se.index.name = "Letter"
In [21]: se.name = "Number"
上述代码是Series的命名,其中In [20]是为se中的索引命名为“Letter”,In [21]是为se命名为“Number”。变量se的运行结果如下所示:
In [22]: se
Out[22]:
Letter
a 0
b 1
c 2
d 3
e 4
f 5
Name: Number, dtype: int32
从上述运行结果可看出,为Series对象本身及索引命名之后,在Series对象输出时会在索引前显示索引名,在对象后会显示对象名。
Series的自动对齐
Series可实现自动对齐,即不同Series对象运算时会根据其索引进行匹配计算,具体示例如下所示:
In [52]: import numpy as np
In [53]: import pandas as pd
In [54]: se1 = pd.Series(np.arange(1,5),index=['q','qfedu','coding','h'])
In [55]: se2 = pd.Series(np.arange(3,8),
...: index=['qfedu','e','coding','ao','f'])
In [56]: se3 = se1 + se2
上述代码是Series的自动对齐,其中In [54]和In [55]是创建两个Series,并设置索引,最后分别赋值给变量se1和se2;In [56]是计算se1与se2的和,并将返回结果赋值给变量se3。各变量的运行结果如下所示:
In [57]: se1
Out[57]:
q 1
qfedu 2
coding 3
h 4
dtype: int32
In [58]: se2
Out[58]:
qfedu 3
e 4
coding 5
ao 6
f 7
dtype: int32
In [59]: se3
Out[59]:
ao NaN
coding 8.0
e NaN
f NaN
h NaN
q NaN
qfedu 5.0
dtype: float64
从上述运行结果可看出,不同的Series对象在运算时会自动匹配相同索引项,并做对应运算,对于未匹配项也会进行运算,只是所得结果可能为NaN,其中se1和se2中共同含有索引为“qfedu”和“coding”的元素,因此,两元素进行相应加法运算,而索引为“h”、“ao”、“q”、“f”、“e”在两Series对象中不能匹配,因此,最终结果均为NaN。
网友评论