操作 Pandas 中的数据:索引对象

已完成

数据科学的一个重要部分是操作数据来对其进行分析。 (一条经验法则是,在任何数据科学项目中,80% 的都在清理和整理项目的数据。)因此,有必要了解 Pandas 提供用于处理 Series 中(特别是 DataFrames 中)的数据的工具。 由于这两种数据结构都是有序的,因此我们先要深入了解是什么使它们拥有现在的结构:Index

Pandas 中的 Index 对象

Pandas 中的 SeriesDataFrames 都具有显式索引,使你能够在其中引用和修改数据。 这些索引实际上是对象本身。 可将 Index 对象视为不可变的数组或固定大小的集。

值得花时间了解 Index 对象的属性。 让我们回到本部分前面的一个示例来检查这些属性。

series_example = pd.Series([-0.5, 0.75, 1.0, -2], index=['a', 'b', 'c', 'd'])
ind = series_example.index
ind

输出为:

Index(['a', 'b', 'c', 'd'], dtype='object')

Index 的工作方式与数组很像。 你已经了解如何使用标准 Python 索引表示法来检索值或切片:

ind[1]

输出为:

'b'

另一个示例:

ind[::2]

输出为:

Index(['a', 'c'], dtype='object')

Index 对象不可变,并且不能通过常规方式进行修改:

ind[1] = 0

错误输出为:

TypeError                                 Traceback (most recent call last)
<ipython-input-34-906a9fa1424c> in <module>
----> 1 ind[1] = 0

/opt/anaconda3/lib/python3.7/site-packages/pandas/core/indexes/base.py in __setitem__(self, key, value)
   2063 
   2064     def __setitem__(self, key, value):
-> 2065         raise TypeError("Index does not support mutable operations")
   2066 
   2067     def __getitem__(self, key):

TypeError: Index does not support mutable operations

这种不可变性是一件好事。 这使得在多个 SeriesDataFrames 之间共享索引更安全,不会导致意外索引修改引起的可能问题。

亲自试一试

除了与数组相似,Index 的行为也与固定大小的集相似。 这包括遵循 Python 的内置集数据结构所采用的许多约定,以便能够以熟悉的方式计算并集、交集、差集和其他组合。 接下来,让我们操作一下来查看功能演示。

ind_odd = pd.Index([1, 3, 5, 7, 9])
ind_prime = pd.Index([2, 3, 5, 7, 11])

请尝试以下做法:

  • 交集 (ind_odd & ind_prime)
  • 并集 (ind_odd | ind_prime)
  • ind_odd ^ ind_primeind_odd 的对称差集 (ind_prime)

提示(展开以显示)
ind_odd & ind_prime
Int64Index([3, 5, 7], dtype='int64')
ind_odd | ind_prime
Int64Index([1, 2, 3, 5, 7, 9, 11], dtype='int64')
ind_odd ^ ind_prime
Int64Index([1, 2, 9, 11], dtype='int64')




你还可通过对象方法(如 ind_odd.intersection(ind_prime))来访问这些操作。 下表列出了一些有用的 Index 方法和属性。

方法 说明
append 与其他 Index 对象串联来生成新的 Index
diff 计算差集得到 Index
drop 删除传递的值来计算新的 Index
insert 在索引 Index 处插入元素来计算新的 i
is_monotonic 如果每个元素大于或等于上一个元素,则返回 True
is_unique 如果 True 没有重复值,则返回 Index
isin 计算一个布尔数组,该数组指示每个值是否包含在传递的集合中
unique 按先后顺序计算唯一值的数组