pandas中文文档
Series是一维标签数组,能够保存任何数据类型(整数,字符串,浮点数,Python对象等)。 轴标签统称为索引。 创建Series的基本方法是调用:
>>> s = pd.Series(data, index=index)
这里data参数可以是许多不同的对象:
传递的索引是轴标签列表。 因此,根据数据的不同,可分为几种情况:
In [3]: s = pd.Series(np.random.randn(5), index=['a', 'b', 'c', 'd', 'e']) In [4]: s Out[4]: a 0.4691 b -0.2829 c -1.5091 d -1.1356 e 1.2121 dtype: float64 In [5]: s.index Out[5]: Index(['a', 'b', 'c', 'd', 'e'], dtype='object') In [6]: pd.Series(np.random.randn(5)) Out[6]: 0 -0.1732 1 0.1192 2 -1.0442 3 -0.8618 4 -2.1046 dtype: float64
In [7]: d = {'b' : 1, 'a' : 0, 'c' : 2} In [8]: pd.Series(d) Out[8]: b 1 a 0 c 2 dtype: int64
在上面的示例中,如果您使用的Python版本低于3.6或Pandas版本低于0.23,则Series将按字典键的字母顺序排序(即['a','b','c'] 而不是['b','a','c'])。
如果传递索引,则将拉出与索引中的标签对应的数据中的值。
In [9]: d = {'a' : 0., 'b' : 1., 'c' : 2.} In [10]: pd.Series(d) Out[10]: a 0.0 b 1.0 c 2.0 dtype: float64 In [11]: pd.Series(d, index=['b', 'c', 'd', 'a']) Out[11]: b 1.0 c 2.0 d NaN a 0.0 dtype: float64
In [12]: pd.Series(5., index=['a', 'b', 'c', 'd', 'e']) Out[12]: a 5.0 b 5.0 c 5.0 d 5.0 e 5.0 dtype: float64
In [13]: s[0] Out[13]: 0.46911229990718628 In [14]: s[:3] Out[14]: a 0.4691 b -0.2829 c -1.5091 dtype: float64 In [15]: s[s > s.median()] Out[15]: a 0.4691 e 1.2121 dtype: float64 In [16]: s[[4, 3, 1]] Out[16]: e 1.2121 d -1.1356 b -0.2829 dtype: float64 In [17]: np.exp(s) Out[17]: a 1.5986 b 0.7536 c 0.2211 d 0.3212 e 3.3606 dtype: float64我们将在单独的章节中讨论基于数组的索引。
Series类似于固定大小的dict,您可以通过索引标签获取和设置值:
In [18]: s['a'] Out[18]: 0.46911229990718628 In [19]: s['e'] = 12. In [20]: s Out[20]: a 0.4691 b -0.2829 c -1.5091 d -1.1356 e 12.0000 dtype: float64 In [21]: 'e' in s Out[21]: True In [22]: 'f' in s Out[22]: False
如果索引标签不存在,则会抛出异常:
>>> s['f'] KeyError: 'f'
使用get方法,缺少的标签将返回None或指定的默认值:
In [23]: s.get('f') In [24]: s.get('f', np.nan) Out[24]: nan
另请参考:属性访问相关的章节
In [25]: s + s Out[25]: a 0.9382 b -0.5657 c -3.0181 d -2.2713 e 24.0000 dtype: float64 In [26]: s * 2 Out[26]: a 0.9382 b -0.5657 c -3.0181 d -2.2713 e 24.0000 dtype: float64 In [27]: np.exp(s) Out[27]: a 1.5986 b 0.7536 c 0.2211 d 0.3212 e 162754.7914 dtype: float64
Series和ndarray之间的主要区别在于Series之间的操作会根据标签索引自动对齐数据。 因此,您可以不考虑参与计算的Series是否具有相同标签。
In [28]: s[1:] + s[:-1] Out[28]: a NaN b -0.5657 c -3.0181 d -2.2713 e NaN dtype: float64未对齐的Series之间的操作结果将包含所涉及的索引的并集。 如果在一个Series或另一个Series中找不到标签,结果将被标记为缺少值NaN。 能够在不进行任何明确数据对齐的情况下编写代码,使得在交互式数据分析和研究中获得巨大的自由度和灵活性。 pandas数据自动对齐的特性,使得pandas有别于大多数其他对标签数据处理的工具。
注意
通常,我们选择不同索引对象之间的操作的默认结果:索引的并集,以避免信息丢失。 尽管缺少数据,但索引标签通常是重要的信息,作为计算的一部分。 您当然可以选择通过dropna函数删除缺少数据的标签。Series 可以有 name 属性:
In [29]: s = pd.Series(np.random.randn(5), name='something') In [30]: s Out[30]: 0 -0.4949 1 1.0718 2 0.7216 3 -0.7068 4 -1.0396 Name: something, dtype: float64 In [31]: s.name Out[31]: 'something'在许多情况下,Series name属性将自动分配,特别是在获取1维切片的DataFrame时,如下所示。
In [32]: s2 = s.rename("different") In [33]: s2.name Out[33]: 'different'注意这里‘s' 和 ’s2' 是不同的对象。