# 4.1.1 序列创建与基本操作（问答库）

1. 【单选题·易】在 Pandas 中，序列（Series）是用于存储什么的结构？
   A. 二维表格数据
   B. 一维数组
   C. 三维张量
   D. 键值对集合（与字典完全相同）
   **答案：B**
   **解析：** 语料定义：序列是用于存储一维数组的结构，要素为一组数据和对应的索引。二维表格对应的是数据框（DataFrame）。

2. 【单选题·易】执行下列代码后，序列 `a` 的索引是什么？

```python
from pandas import Series
a = Series([6.3, 43.1, 24.4])
print(a)
```

   A. `['6.3', '43.1', '24.4']`
   B. 默认整数索引 0、1、2
   C. 因未指定 `index` 而报错
   D. 自动生成字母索引 A、B、C
   **答案：B**
   **解析：** 用列表作为参数且不指定索引时，自动生成整数索引。`a[1]` 的值为 43.1。

3. 【判断题·易】使用序列的 `drop()` 方法删除元素时，默认会直接修改原始序列。
   **答案：×**
   **解析：** `drop()` 默认返回一个不含被删元素的新序列，不修改原始对象。要在原对象上删除，必须指定 `inplace=True`。

4. 【判断题·易】无论序列对象有无自定义标签，都可以通过整数索引访问其中的元素。
   **答案：√**
   **解析：** 课程强调：无论对象有无标签，都可以通过索引访问；有标签时还可以用标签访问，便于理解数据而不必依赖整数索引。

5. 【多选题·中】下列关于创建序列的说法，正确的有：
   A. 可用列表作为参数创建，不指定索引时自动生成整数索引
   B. 可用 numpy 数组作为参数，并用 `index` 指定标签
   C. 创建后不能再修改标签
   D. 创建后可通过对象的 `index` 属性修改标签
   **答案：ABD**
   **解析：** 课程给出两种创建方法：列表自动整数索引，numpy 数组加 `index` 指定标签。创建后还可通过 `index` 属性改标签，如 `gu.index=['幸福银行', '平安科技', '南方通信']`。C 错误。

6. 【单选题·中】执行下列代码，输出中包含哪些标签？

```python
from pandas import Series
gu = Series([6.3, 43.1, 24.4], index=['幸福银行', '平安科技', '南方通信'])
print(gu['平安科技':'南方通信'])
```

   A. 仅「平安科技」（标签切片不含结束标签）
   B. 「平安科技」和「南方通信」（标签切片包含结束标签）
   C. 「幸福银行」「平安科技」「南方通信」全部包含
   D. 报错，标签不能用于切片
   **答案：B**
   **解析：** 标签切片语法为 `对象['起始标签':'结束标签']`，切连续元素且包含结束标签。对比：索引切片 `gu[0:2]` 与 Python 相同，不含结束位置，只含「幸福银行」和「平安科技」。

7. 【单选题·中】对已有序列执行 `对象['标签1'] = 值`，下列说法正确的是：
   A. 只能修改已有标签的值，标签不存在则报错
   B. 只能新增元素，不能修改已有值
   C. 标签已存在则修改其值，不存在则新增该标签及对应值
   D. 必须先调用 `append()` 才能增加元素
   **答案：C**
   **解析：** 增加和修改的方法与 Python 字典相同。例如 `gu['南方通信'] = 25.3` 修改已有价格，`gu['光明证券'] = 17.78` 增加新元素。

8. 【多选题·中】关于序列的 `drop()` 方法，下列说法正确的有：
   A. 删除单个元素时，直接将标签传给 `drop`
   B. 删除多个元素时，将多个标签封装到列表中传入
   C. 传入的标签列表顺序必须与序列中标签顺序完全一致
   D. 若要在原始序列中删除，需要指定 `inplace=True`
   **答案：ABD**
   **解析：** 删除多个时列表中标签顺序可以与序列对象中的顺序不同。C 错误。`drop()` 默认不改原对象。

9. 【判断题·中】对序列对象切片，切片得到的是原始对象的视图。
   **答案：√**
   **解析：** 课程明确：对序列对象切片，切片得到的是原始对象的视图。可用索引切片或标签切片两种方法。

10. 【单选题·难】执行下列代码后，`南方通信` 对应的结果是多少？

```python
from pandas import Series
open = Series([23.5, 6.1, 42.1], index=['南方通信', '幸福银行', '平安科技'])
close = Series([44.3, 22.6, 6.5], index=['平安科技', '南方通信', '幸福银行'])
print(close - open)
```

   A. 44.3 − 23.5 = 20.8（按位置把两个序列的第一个元素相减）
   B. 22.6 − 23.5 = −0.9（按索引「南方通信」对齐后再减）
   C. 6.5 − 23.5 = −17.0
   D. 因两个序列的索引顺序不同而报错
   **答案：B**
   **解析：** 序列之间运算时 Pandas 按索引对齐，不按位置。`close` 中南方通信为 22.6，`open` 中南方通信为 23.5，差为 −0.9。同理，平安科技为 2.2，幸福银行为 0.4。

11. 【简答题·中】请写出完整可运行代码：用 numpy 数组创建成绩序列 `chengji`（语文 70、数学 85、英语 90），然后取出数学成绩。
   **答案：**

```python
import numpy as np
from pandas import Series
chengji = Series(np.array((70, 85, 90)), index=['语文', '数学', '英语'])
print(chengji['数学'])  # 输出 85
```

   **解析：** 评分要点：① 使用 `Series` 与 `np.array`；② `index` 指定三门课程标签；③ 用标签 `'数学'` 访问，结果为 85。未指定标签而用位置访问可酌情给部分分。

12. 【简答题·难】结合下列代码，回答三个问题：（1）`s[0:2]` 与 `s['数学':'英语']` 各包含哪些元素？（2）`s.drop('语文')` 之后原对象 `s` 是否还含「语文」？（3）若另有序列 `t` 的索引顺序与 `s` 不同，`s + t` 会按什么规则计算？

```python
from pandas import Series
s = Series([70, 85, 90], index=['语文', '数学', '英语'])
print(s[0:2])
print(s['数学':'英语'])
s2 = s.drop('语文')
print(s)
print(s2)
```

   **答案：**
   （1）`s[0:2]` 含语文 70、数学 85（索引切片不含结束位置）；`s['数学':'英语']` 含数学 85、英语 90（标签切片包含结束标签）。
   （2）仍含「语文」。`drop()` 默认返回新序列 `s2`，不修改 `s`；要改原对象需 `inplace=True`。
   （3）按索引（标签）自动对齐后再相加，即使两个序列的索引顺序不同也能正确对应。
   **解析：** 评分要点：① 能区分索引切片与标签切片的闭开区间差异；② 说明 `drop` 默认不改原对象；③ 点明序列运算按索引对齐而非按位置。三点答全给满分。
