Pandas实战-Series对象

2023-11-01

本文将主要介绍以下内容:

1. Series概述

2. 从Python对象创建Series

3. 读取最前面和最后面的数据

4. 数学运算

5. 将Series传递给Python的内置函数

 

Series是Pandas的两个主要数据结构之一,它是用于存储同质数据的一维标记数组。术语“同质”是指这些值具有相同的数据类型。

每个Series的值都被分配一个标签和顺序。标签是值的标识符,可以是任何数据类型;顺序用整数表示,第一个值位于位置0。数据结构是一维的,因为任何元素都可以通过其标签或顺序位置进行访问。标签和位置的组合被称为Series的索引。

Series结合并扩展了Python内置数据结构的最佳特性。像列表一样,Series按顺序保存值;像字典一样,每个值都可以通过键或标签来访问。

1. Series概述

我们将从导入pandas和numpy开始,后一个库用于生成一些随机数据。pandas和numpy的流行社区别名是pd和np:

In [1]: import pandas as pd
        import numpy as np

1.1 模块、类和实例

pandas是拥有超过100个类、函数、异常、常量等的组合。Jupyter Notebook提供了一种便捷的方式来搜索对象的属性,只需要在对象后输入一个点,然后按Tab键,Notebook将显示对象的属性和方法。当键入其它字符时,结果将被过滤为与搜索字词匹配的结果,请注意,搜索区分大小写。

下例显示pd所有以大写字母S开头的属性:

然后使用键盘的箭头键从下拉列表中选择Series,然后按Enter键。最后输入括号实例化Series对象:

In  [2]: pd.Series()
Out [2]: Series([], dtype: object)

就这样我们已经成功创建了第一个pandas对象!

1.2 用值填充Series

实例化对象时,可以为它的某些或所有属性传递初始值。这些值将传递给类构造函数,它是可通过类实例化对象的一种特殊方法。构造函数的参数可以按顺序传递,也可以用显式关键字参数传递,参数必须用逗号分隔。

Series构造函数的第一个参数是一个对象,其值可以用作Series的数据源。构造函数支持各种输入,包括列表、字典和元组。下面是使用Python列表来创建Series对象的例子:

In  [3]: ice_cream_flavors = ["Chocolate", "Vanilla", "Strawberry", "Rum Raisin"]
         pd.Series(ice_cream_flavors)

Out [3]: 0    Chocolate
         1      Vanilla
         2   Strawberry
         3   Rum Raisin
         dtype: object

上例的Series有4个值,请注意,列表值的顺序会保留在Series中。每个构造函数参数都对应一个参数,每个参数都有指定的名称。上例ice_cream_flavors列表作为参数传递给构造函数的第一个参数,也就是名为data的参数。

我们可以在Jupyter Notebook中查看构造函数参数的完整列表,只要把鼠标光标放在括号之间,然后按Shift + Tab键:

Series构造函数定义了总共六个参数:data、index、dtype、name、copy和fastpath,等号右边的值是每个参数的默认值。当参数传递时没有指定参数名称时,Python会假定它们是按顺序传递的。在前面的示例中,我们的ice_cream_flavors列表作为第一个参数传递,因此将其分配给第一个参数data。index,dtype和name参数的默认值都是None;而copy和fastpath参数的默认值是False。

除了按顺序传递参数,还可以用显式关键字参数传递,这种方式允许以任何顺序传递:

In  [4]: pd.Series(data = ice_cream_flavors)

Out [4]: 0    Chocolate
         1      Vanilla
         2   Strawberry
         3   Rum Raisin
         dtype: object

1.3 自定义索引

Series左侧的递增数字列表称为索引,它的作用与列表中的索引位置相同:数字指示元素在行中的位置。pandas的索引既可以保存元素的位置,也可以保存标签。索引的标签可以包含任何不可变的数据类型。

Series构造函数定义了一个index参数,其参数将用作索引的数据源。如果未传递显式参数,pandas默认使用从0开始的数字索引,所以最后一个的索引号始终比该列中的值的总数小一。在下面的示例中,ice_cream_flavors是一个列表,days_of_week是一个元组,两个对象的长度均为4:

In  [5]: ice_cream_flavors = ["Chocolate", "Vanilla", "Strawberry", "Rum Raisin"]
         days_of_week = ("Monday", "Wednesday", "Friday", "Saturday")
         pd.Series(data = ice_cream_flavors, index = days_of_week)

Out [5]: Monday     Chocolate
         Wednesday    Vanilla
         Friday    Strawberry
         Saturday  Rum Raisin
         dtype: object

pandas是基于共享索引位置将ice_cream_flavors和days_of_week的值相关联。例如,Strawberry和Friday都在它们各自对象的索引位置2,因此被关联在一起。

Series索引与列表索引或字典键不同的是前者允许重复。在下例中,Wednesday在days_of_week元组中出现两次,在Series索引标签中出现两次:

In  [6]: ice_cream_flavors = ["Chocolate", "Vanilla", "Strawberry", "Rum Raisin"]
         days_of_week = ("Monday", "Wednesday", "Friday", "Wednesday")
         # 下面两行代码是一样的
         pd.Series(ice_cream_flavors, days_of_week)
         pd.Series(data = ice_cream_flavors, index = days_of_week)

Out [6]: Monday      Chocolate
         Wednesday     Vanilla
         Friday     Strawberry
         Wednesday  Rum Raisin
         dtype: object

如前所述,关键字参数允许以任何顺序传递值。因此,下面的两行代码是一样的:

pd.Series(data = ice_cream_flavors, index = days_of_week)
pd.Series(index = days_of_week, data = ice_cream_flavors)

除了data和index之外,第三个参数dtype也很重要,它反映了Series值的数据类型。如果未将显式值传递给dtype参数,则默认为None,并推断适当的数据类型。有点困惑的是,pandas对于字符串值会显示dtype: object。对于其它数据类型,通常会看到更精确的输出。下面的示例根据浮点数,布尔值和整数值创建一些Series对象:

In  [7]: stock_prices = [985.32, 950.44]
         times = ["Open", "Close"]
         pd.Series(data = stock_prices, index = times)

Out [7]: Open    985.32
         Close   950.44
         dtype: float64

In  [8]: bunch_of_bools = [True, False, False]
         pd.Series(bunch_of_bools)

Out [8]: 0    True
         1   False
         2   False
         dtype: bool

In  [9]: lucky_numbers = [4, 8, 15, 16, 23, 42]
         pd.Series(lucky_numbers)

Out [9]: 0    4
         1    8
         2   15
         3   16
         4   23
         5   42
         dtype: int64

1.4 创建有缺失值的序列

在现实世界中,经常遇到的问题是缺少值。pandas会使用numpy库的nan对象表示,该对象代表无效或缺失的概念。NaN是“not a number”的缩写,是无效值的笼统术语。

在下例中,我们从包含一个缺失值的列表中创建一个Series。在输出中,我们可以看到索引位置2处的NaN:

In  [10]: temperatures = [94, 88, np.nan, 91]
          pd.Series(data = temperatures)

Out [10]: 0    94.0
          1    88.0
          2     NaN
          3    91.0
          dtype: float64

请注意,输入的数据类型已从列表中的整数转换为Series中的浮点数。pandas会在发现nan值时自动进行此转换。

2. 从Python对象创建Series

Series构造函数中的data参数接受各种输入,包括许多内置的Python对象。

2.1 字典 Dictionaries

当传递一个字典,pandas将使用每个键作为Series中的相应索引标签:

In  [11]: calorie_info = {
              "Cereal": 125,
              "Chocolate Bar": 406,
              "Ice Cream Sundae": 342
          }
          diet = pd.Series(calorie_info)
          diet

Out [11]: Cereal            125
          Chocolate Bar     406
          Ice Cream Sundae  342
          dtype: int64

Series是由几个较小的对象组成或由其构成,每个较小的对象都被赋予特定的职责。Series是对象的合并,例如numpy库的ndarray(用于存储值)和pandas库的Index对象(用于存储索引)。pandas内置了十几个索引对象,以支持各种数据类型的索引,例如integers、intervals、和datetimes。

Series的嵌套对象可通过属性的方法读取。例如,values属性返回存储值的ndarray对象:

In  [12]: diet.values

Out [12]: array([125, 406, 342])

我们可以将任何对象传递给Python的内置type函数,以查看其构造类。注意ndarray来自NumPy,而不是Pandas。 ndarray对象通过依赖于底层C编程语言进行许多计算来优化速度和效率。

In  [13]: type(diet.values)

Out [13]: numpy.ndarray

类似地,index属性返回Series内部存储的Index对象:

In  [14]: diet.index

Out [14]: Index(['Cereal', 'Chocolate Bar', 'Ice Cream Sundae'], dtype='object')

In  [15]: type(diet.index)

Out [15]: pandas.core.indexes.base.Index

size属性返回Series中值的数量:

In  [16]: diet.size

Out [16]: 3

shape属性返回任何pandas数据结构的尺寸的元组。对于像Series这样的一维对象,元组的唯一值就是它的大小。3之后的逗号是Python中单元素元组的标准可视输出:

In  [17]: diet.shape

Out [17]: (3,)

is_unique属性返回Series中的值是否是唯一不重复的:

In  [18]: diet.is_unique

Out [18]: True

In  [19]: pd.Series(data = [3, 3]).is_unique

Out [19]: False

is_monotonic属性返回Series中的值是否是递增的:

In  [20]: pd.Series(data = [1, 3, 6]).is_monotonic

Out [20]: True

In  [21]: pd.Series(data = [1, 6, 3]).is_monotonic

Out [21]: False

2.2 元组 Tuples

Series也可以接受元组作为其数据源。提醒一下,元组是类似于列表的数据结构,但它是不可变的。一旦声明了元组,就不能在元组中添加,删除或替换元素。

In  [22]: pd.Series(data = ("Red", "Green", "Blue"))

Out [22]: 0    Red
          1  Green
          2   Blue
          dtype: object

要将一个或多个元组用作Series值,可以将它们包装在一个较大的容器(如列表)中:

In  [23]: pd.Series(data = [("Red", "Green", "Blue"), ("Orange", "Yellow")])

Out [23]: 0    (Red, Green, Blue)
          1      (Orange, Yellow)
          dtype: object

2.3 集合Sets

集合是唯一值的无序集合。提醒一下,用于声明集合的大括号语法与用于声明字典的大括号语法相同。Python能够根据键值对的分配(或没有分配)区分两种类型。如果我们将集合传递给Series构造函数,pandas将抛出TypeError异常。集合中没有顺序的概念,字典也是无序的,但是键和值之间存在关联,pandas可以将其转换为索引标签和值的关联,但不能对集合执行相同的操作。

In [24]: my_set = { "Ricky", "Bobby" }
         pd.Series(my_set)

---------------------------------------------------------------------------
TypeError    Traceback (most recent call last)
<ipython-input-25-bf85415a7772> in <module>
         1  my_set = { "Ricky", "Bobby" }
---->    2  pd.Series(my_set)
TypeError: 'set' type is unordered

不过可以把集合在传递给Series构造函数之前,将其转换为有序数据结构(如列表):

In  [25]: pd.Series(list(my_set))

Out [25]: 0    Ricky
          1    Bobby
          dtype: object

2.4 NumPy数组

Series构造函数的data参数还接受ndarray对象作为其参数。在下例中,我们使用randint方法生成1到101之间的10个随机值的一维数组:

In  [26]: data = np.random.randint(1, 101, 10)
          data

Out [26]: array([27, 16, 13, 83, 3, 38, 34, 19, 27, 66])

In  [27]: pd.Series(data)

Out [27]: 0    27
          1    16
          2    13
          3    83
          4     3
          5    38
          6    34
          7    19
          8    27
          9    66
          dtype: int64

Series是一维数据结构,仅支持单个“列”数据。因此,如果我们尝试将多维ndarray传递给构造函数,例如下面的randn方法生成5x10的ndarray,则pandas将抛出“Data must be 1-dimensional”异常:

In  [28]: pd.Series(np.random.randn(5, 10))

---------------------------------------------------------------------------

Exception    Traceback (most recent call last)
<ipython-input-16-917a11418a68> in <module>
----> 1   pd.Series(np.random.randn(5, 10))
Exception: Data must be 1-dimensional

3. 读取最前面和最后面的数据

接下来让我们使用Python的range函数来创建一个大小合适的Series。range的第一个参数是下限,第二个参数是上限,第三个参数是步长,即两个数字之间的差。在下例中,我们生成一个介于0和500之间的序列,每两个值的步长是5:

In  [29]: values = range(0, 500, 5)
          nums = pd.Series(data = values)
          nums

Out [29]: 0      0
          1      5
          2     10
          3     15
          4     20
          ...
          95   475
          96   480
          97   485
          98   490
          99   495
          Length: 100, dtype: int64

现在,我们有了一个具有100个值的Series!请注意出现在数据中间的三个点,为了避免拖垮Jupyter Notebook,pandas方便地将Series截短仅显示前五行和后五行的数据。

返回数据集的最前面一行或多行可以使用head方法,它接受一个表示要读取的行数的参数n:

In  [30]: nums.head(3)

Out [30]: 0    0
          1    5
          2   10
          dtype: int64

上面的代码等同于nums.head(n = 3),参数n的默认值是5。如果调用head方法未显式传递n的参数,则将返回数据集的前五行:

In  [31]: nums.head()

Out [31]: 0    0
          1    5
          2   10
          3   15
          4   20
          dtype: int64

返回数据集的最后面一行或多行可以使用tail方法,参数n的默认值也是5:

In  [32]: nums.tail(3)

Out [32]: 97    485
          98    490
          99    495
          dtype: int64

In  [33]: nums.tail()

Out [33]: 95    475
          96    480
          97    485
          98    490
          99    495
          dtype: int64

4. 数学运算

Series对象包含用于数学和统计运算的多种方法。在介绍它们之前,我们先使用一个递增列表来定义一个Series。在它的中间,我们用np.nan来表示缺失值:

In  [34]: s = pd.Series([1, 2, 3, np.nan, 4, 5])

sum方法返回所有值的总和,默认会忽略缺失值:

In  [35]: s.sum()

Out [35]: 15.0

大多数方法都包含一个skipna的参数,可以将其设置为False以计算缺失值,但因为空值不能与任何值相加,所以返回值也是一个空值:

In  [36]: s.sum(skipna = False)

Out [36]: nan

min_count参数用于设置必须存在的最少非空值数量。在上例中s包含5个有效数值。在下面的前两个例子中,满足指定的要求。但在第三个中,有效数值少于指定的6个,因此sum返回nan:

In  [37]: s.sum(min_count = 3)

Out [37]: 15.0

In  [38]: s.sum(min_count = 5)

Out [38]: 15.0

In  [39]: s.sum(min_count = 6)

Out [39]: nan

product方法将Series的值相乘,像sum一样,它有skipna和min_count参数:

In  [40]: s.product()

Out [40]: 120.0

cumsum(累加和)方法返回一个新的Series,其值是滚动的累加和。每个索引位置都是该索引处的值和之前值的总和,这有助于确定哪些值对最终总数贡献最大。

In  [41]: s.cumsum()

Out [41]: 0    1.0
          1    3.0
          2    6.0
          3    NaN
          4   10.0
          5   15.0
          dtype: float64

在索引位置0的值是1,在索引位置1的累加和为1 + 2 = 3。最终索引位置的累加总和等于sum方法的返回值。

请注意,NaN值默认包含在返回的Series中。如果设置skipna参数为False,则返回的值会在出现nan时为NaN,然后剩下的值全部为NaN:

In  [42]: s.cumsum(skipna = False)

Out [42]: 0    1.0
          1    3.0
          2    6.0
          3    NaN
          4    NaN
          5    NaN
          dtype: float64

pct_change方法返回Series相邻值的百分比差异。数学公式等于将当前值和先前值相减,然后将结果除以先前值。pct_change方法默认会使用前一个有效值代替NaN:

In  [44]: s.pct_change()

Out [44]: 0         NaN
          1    1.000000
          2    0.500000
          3    0.000000
          4    0.333333
          5    0.250000
          dtype: float64

- 在索引0处,因为没有先前的值,所以返回NaN;

- 在索引1处,将值2.0与先前的值1.0相比较,百分比变化为(2.0 - 1.0)/1.0 = 100%,所以返回1.000000;

- 在索引3处,当前值是NaN,使用最后一个有效值(索引2中的3.0)代替,所以变化是0,返回0.000000;

- 在索引4处,将值4.0与上一行的值进行比较。再次,将索引3的NaN替换为最后一个有效值3.0。4和3之间的百分比变化为(4.0 - 3.0)/3.0 = 0.333333(即增加了33%)。

我们可以使用fill_method参数来自定义pct_change方法用来替代NaN值的逻辑。该参数默认值是pad,也就是之前提到过的使用前一个有效值代替NaN。下面的代码都会返回一样的结果:

s.pct_change()
s.pct_change(fill_method = "pad")
s.pct_change(fill_method = "ffill")

处理缺失值的另外一种策略是使用后一个有效值代替NaN,fill_method参数值为bfill或backfill:

In  [46]: s.pct_change(fill_method = "bfill") # is the same as
          s.pct_change(fill_method = "backfill")

Out [46]: 0         NaN
          1    1.000000
          2    0.500000
          3    0.333333
          4    0.000000
          5    0.250000
          dtype: float64

不难发现索引3和4的返回值和之前的例子刚好相反,因为当遇到NaN时会使用后一个有效值来代替,而不是前一个。

mean方法返回Series值的平均值,使用值的总和除以值的数量(15/5=3):

In  [47]: s.mean()

Out [47]: 3.0

median方法返回Series值的中位数,也就是说有一半的值将大于中位数,另一半的值将小于中位数。

In  [48]: s.median()

Out [48]: 3.0

std方法返回Series值的标准差,即数据变化量的统计量度:

In  [49]: s.std()

Out [49]: 1.5811388300841898

max和min方法返回Series值的最大和最小值:

In  [50]: s.max()

Out [50]: 5.0

In  [51]: s.min()

Out [51]: 1.0

如果Series的值由字符串组成,则它们将按字母顺序排序。最大值是最接近字母z的值,最小值是最接近字母a的值:

In  [52]: animals = pd.Series(["koala", "aardvark", "zebra"])
          animals.max()

Out [52]: 'zebra'

In  [53]: animals.min()

Out [53]: 'aardvark'

describe方法返回一系列常见的统计评估,包括计数、均值、标准差等:

In  [54]: s.describe()

Out [54]: count    5.000000
          mean     3.000000
          std      1.581139
          min      1.000000
          25%      2.000000
          50%      3.000000
          75%      4.000000
          max      5.000000
          dtype: float64

sample方法返回Series中的一个随机值集合,它是一个新的Series对象。随机分类使新Series中的值顺序可能与原始Series中的值顺序不一致。在下例中,请注意,如果返回值没有NaN会使pandas返回Series的值为整数而不是浮点数:

In  [55]: s.sample(3)

Out [55]: 1    2
          3    4
          2    3
          dtype: int64

sample方法有一个参数n,用于定义返回随机值的数量,默认为1:

In  [56]: s.sample()

Out [56]: 0    1
          dtype: int64

unique方法返回Series中唯一值的ndarray对象:

In  [57]: authors = pd.Series(["Hemingway", "Orwell", "Dostoevsky", "Fitzgerald", "Orwell"])
          authors.unique()

Out [57]: array(['Hemingway', 'Orwell', 'Dostoevsky', 'Fitzgerald'], dtype=object)

nunique方法返回Series中唯一值的数量:

In  [58]: authors.nunique()

Out [58]: 4

4.1 算术运算

让我们创建一个新的Series。提醒一下,任何NaN值都会将Series中的值强制转换为浮点数:

In  [59]: s1 = pd.Series(data = [5, np.nan, 15], index = ["A", "B", "C"])
          s1

Out [59]: A    5.0
          B    NaN
          C    15.0
          dtype: float64

标准算术运算(例如加、减、乘、除)可以应用于Series中的每个值。在下例中,我们将s1中的每个值加3,返回一个新的Series对象:

In  [60]: s1 + 3

Out [60]: A     8.0
          B     NaN
          C    18.0
          dtype: float64

NaN值保持不变,这些规则也适用于减法、乘法和除法:

In  [61]: s1 - 5

Out [61]: A    0.0
          B    NaN
          C   10.0
          dtype: float64

In  [62]: s1 * 2

Out [62]: A    10.0
          B     NaN
          C    30.0
          dtype: float64

In  [63]: s1 / 2

Out [63]: A    2.5
          B    NaN
          C    7.5
          dtype: float64

运算符 // 执行除法后取整。例如,15 / 4 = 3.75,15 // 4 = 3。

In  [64]: s1 // 4

Out [64]: A    1.0
          B    NaN
          C    3.0
          dtype: float64

模运算符 % 返回除法的余数:

In  [65]: s1 % 3

Out [65]: A    2.0
          B    NaN
          C    0.0
          dtype: float64

4.2 Broadcasting

数学运算也可以应用于多个Series对象。根据一般经验,pandas将始终尝试通过共享索引标签关联数据值。在下例中,s1和s2有相同的三元素索引,因此把索引A(1和4),索引B(2和5)和索引C(3和6)的值加在一起:

In  [66]: s1 = pd.Series([1, 2, 3], index = ["A", "B", "C"])
          s2 = pd.Series([4, 5, 6], index = ["A", "B", "C"])
          s1 + s2

Out [66]: A    5
          B    7
          C    9
          dtype: int64

Python的等于 == 和不等于 != 运算符可以比较两个Series中相同索引处的值。在下例中,返回值是一个新的布尔值Series,请注意,NaN值被认为是不相等的:

In  [67]: s1 = pd.Series(data = [3, 6, np.nan, 12])
          s2 = pd.Series(data = [2, 6, np.nan, 12])
          s1 == s2

Out [67]: 0    False
          1     True
          2    False
          3     True
          dtype: bool

In  [68]: s1 != s2

Out [68]: 0    True
          1   False
          2    True
          3   False
          dtype: bool

如果索引之间存在差异,则Series之间的操作将变得更加复杂。一个索引可能比另一个索引具有更多或更少的值,或者这些值本身之间可能不匹配。在下例中,两个Series之间仅有两个索引标签(B和C)是相同的,对于其余索引(A,D和E),运算后返回NaN值,这是由于其中一个Series缺少相应的值。

In  [69]: s1 = pd.Series(data = [5, 10, 15], index = ["A", "B", "C"])
          s2 = pd.Series(data = [4, 8, 12, 14], index=["B", "C", "D", "E"])
          s1 + s2

Out [69]: A    NaN
          B   14.0
          C   23.0
          D    NaN
          E    NaN
          dtype: float64

5. 将Series传递给Python的内置函数

让我们创建一个代表美国城市的字符串Series:

In  [70]: cities = pd.Series(data = ["San Francisco", "Los Angeles", "Las Vegas"])

len函数返回Series中的行数:

In  [71]: len(cities)

Out [71]: 3

如果Series包含NaN值,也将包括在计数中:

In  [72]: mixed_data = [1, np.nan]
          series_with_missing_values = pd.Series(data = mixed_data)
          len(series_with_missing_values)

Out [72]: 2

type函数返回构造对象的类:

In  [73]: type(cities)

Out [73]: pandas.core.series.Series

dir函数返回对象的属性和方法的列表。在Jupyter Notebook中执行代码以查看完整的输出 – 总共超过400个:

In  [74]: dir(cities)

Out [71]: ['T',
           '_AXIS_ALIASES',
           '_AXIS_IALIASES',
           '_AXIS_LEN',
           '_AXIS_NAMES',
           '_AXIS_NUMBERS',
           '_AXIS_ORDERS',
           '_AXIS_REVERSED',
           '_HANDLED_TYPES',
           '__abs__',
           '__add__',
           '__and__',
           '__annotations__',
           '__array__',
           '__array_priority__',
           '__array_ufunc__',
           '__array_wrap__',
           '__bool__', #...]

list函数返回Series值的列表:

In  [75]: list(cities)

Out [75]: ['San Francisco', 'Los Angeles', 'Las Vegas']

dict函数将Series转换为字典,索引标签用作字典键:

In  [76]: dict(cities)

Out [76]: {0: 'San Francisco', 1: 'Los Angeles', 2: 'Las Vegas' }

max函数返回Series中的最大值,如果Series由字符串组成,则max按字母顺序返回最后一个值:

In  [77]: max(cities)

Out [77]: 'San Francisco'

min函数返回Series中的最小值,如果Series由字符串组成,则min按字母顺序返回第一个值:

In  [78]: min(cities)

Out [78]: 'Las Vegas'

in关键字查找给定值是否存在于Series的索引标签中,返回True或False:

In  [79]: "Las Vegas" in cities

Out [79]: False

In  [80]: 2 in cities # 2在索引标签能够找到

Out [80]: True

要查找给定值是否包含在Series的值中,需要使用values属性返回的ndarray对象:

In  [81]: "Las Vegas" in cities.values

Out [81]: True

not in则相反,查找给定值是否不包含在Series中:

In  [82]: 100 not in cities

Out [82]: True

In  [83]: "Paris" not in cities.values

Out [83]: True

 

END O(∩_∩)O

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pandas实战-Series对象 的相关文章

随机推荐

  • unity游戏云化后,暂停后游戏会继续执行问题解决

    问题 云化后点击暂停后可以暂停 但是暂停界面后的游戏主场景仍然在执行 解决这个问题首先要了解下如何暂停游戏 Time timeScale public static float timeScale 时间流逝的标度 可用于慢动作效果 当 ti
  • Flutter 5个必备的桌面插件包将包含在你的下一个版本中

    外链图片转存失败 源站可能有防盗链机制 建议将图片保存下来直接上传 img NkSUeN6B 1622765619020 https ducafecat tech 2021 06 04 translation 5 must have flu
  • UE4 Pak打包、挂载、加载

    首先 必须得明确的一点就是如果想要加载Pak内资源 那么这些资源必须是经过Cook的 如果打包的是未Cook的资源 那么即使Pak挂载成功 也不可能会成功加载Pak内资源 不知道怎么生成Cook资源 可以看我前一篇 UE4 Cook指定平台
  • javascript各种类型数据在表达式中转换成布尔型值的规则总结

    javascript中有5种数据类型 分别为 Undefined Boolean Object Number String 这几类型的数据 当他们处在表达式里面的时候 js解析器会自动将其转换成布尔值来决定当前的条件究竟符合哪个逻辑分支 当
  • MySQL5.6.11安装步骤(Windows7 64位)

    原文地址 http www cnblogs com happyty p 4131686 html 1 下载MySQL Community Server 5 6 21 注意选择系统类型 32位 64位 2 解压MySQL压缩包 将以下载的My
  • Nuxt3+Vite批量引入图片

    通过计算属性获取images文件夹所有层级下所有静态资源
  • WriteError Resulting document after update is larger than 16777216

    MongoDB插入数据失败 问题描述 发生异常 WriteError Resulting document after update is larger than 16777216 full error index 0 code 17419
  • tvm的一个大体介绍

    TVM的一个大体介绍 导入模型 模型转换到relay 转换到 tensor expression TE 自动优化调度 模型编译 转换到TIR tensor IR 编译器编译到机器码 导入模型 可以支持从tf pytorch 或者onnx框架
  • 音频基础学习三——声音的时频谱

    文章目录 前言 时域与频域 1 什么是时域 2 什么是频域 3 一张图理解时域和频域 4 意义 总结 前言 在上一篇文章中 我们了解到 任何重复的波形都可以分解为含有基波频率和一系列为基波倍数的谐波的正弦波分量 同时记录了一些基本的波形 本
  • python 用eclipse编辑器编写唐僧打白骨精

    python 用eclipse编辑器编写唐僧打白骨精 coding utf 8 Created on 2019年7月10日 note 唐僧打白骨精 author LSW version 3 0 YaoGj 10 妖怪攻击力 YaoSm 10
  • 如何用echarts画一个好看的饼图

    前言 最近有个需求 需要绘制一个饼图 为此我根据这次需求来整理了一下关于 echarts 饼图绘制的一些知识点 在这次需求中我需要用到的属性我会详细讲解 其他的属性我会粗略地说一下 并加入其他博主的文章的跳转 综合案例在后续博客中更新 注意
  • android动画不占cpu如何实现,【实战总结】帧动画调优实践

    原标题 实战总结 帧动画调优实践 原文链接 https www zybuluo com avenwu note 876161 APP架构师整理发布 转载请联系作者获得授权 1 背景 在做动画的时候我们有很多选择方案 最常见的是Android
  • JBPM4—请假流程

    1 流程图 2 流程配置文件
  • 数据分析之——Adventure项目分析

    文章目录 数据分析 Adventure项目分析 内容摘要 一 项目简介 二 分析思路 三 分析过程 0 数据准备及清洗 1 导入模块 2 简单了解数据 3 数据处理 1 整体销售表现 1 自行车整体销售量表现 2 自行车整体销售金额表现 3
  • 直流电源线缆 高速电缆 分类

    线缆分类 直流电源线缆采用整长发货 现场需要根据实际使用长度进行截取并现场制作电源线 直流电源线缆包括 48V电源线和电源地线RTN 连接配电盒与配电屏的直流电源线缆的长度和接线端子需要根据工勘确定 直接与电源模块连接的直流电源线缆为OT端
  • VUE常用的自定义指令

    v directives 基于 vue 的自定义指令集合 包含 复制粘贴指令 v copy 长按指令 v longpress 输入框防抖指令 v debounce 禁止表情及特殊字符 v emoji 图片懒加载 v LazyLoad 权限校
  • mysql的分组group by

    文章目录 一 介绍 1 分组查询的内容 2 多字段分组 3 将查询内容连接group concat 4 有条件的分组查询having 一 介绍 将某个字段的相同值分为一组 分组查询的结果强调的是一个整体 每组内容只显示一行 分组查询的内容一
  • C语言-蓝桥杯-基础练习 矩阵乘法

    问题描述 给定一个N阶矩阵A 输出A的M次幂 M是非负整数 例如 A 1 2 3 4 A的2次幂 7 10 15 22 输入格式 第一行是一个正整数N M 1 lt N lt 30 0 lt M lt 5 表示矩阵A的阶数和要求的幂数 接下
  • Python爬虫之Js逆向案例(12)-知乎答案批量获取保存到CSV文件

    声明 知乎答案批量获取分析仅用于研究和学习 如有侵权 可联系删除 大家好 本期分享的内容是一个关于批量获取知乎答案的案例 本案例的重点是教大家在写爬虫时如何更规范的去编写自己的爬虫 场景是这样的 最近在帮一位同学排查几个爬虫问题 于是乎我三
  • Pandas实战-Series对象

    本文将主要介绍以下内容 1 Series概述 2 从Python对象创建Series 3 读取最前面和最后面的数据 4 数学运算 5 将Series传递给Python的内置函数 Series是Pandas的两个主要数据结构之一 它是用于存储