3.11 向量化字符串操作
使用 Python 的一个优势就是字符串处理起来比较容易。在此基础上创建的 Pandas 同样提供了一系列向量化字符串操作(vectorized string operation),它们都是在处理(清洗)现实工作中的数据时不可或缺的功能。在这一节中,我们将介绍 Pandas 的字符串操作,学习如何用它们对一个从网络采集来的杂乱无章的数据集进行局部清理。
3.11.1 Pandas字符串操作简介
前面的章节已经介绍过如何用 NumPy 和 Pandas 进行一般的运算操作,因此我们也能简便快速地对多个数组元素执行同样的操作,例如:
import numpy as np x = np.array([2, 3, 5, 7, 11, 13]) x * 2
array([ 4, 6, 10, 14, 22, 26])
向量化操作简化了纯数值的数组操作语法——我们不需要再担心数组的长度或维度,只需要关心需要的操作。然而,由于 NumPy 并没有为字符串数组提供简单的接口,因此需要通过繁琐的 for 循环来解决问题:
data = ['peter', 'Paul', 'MARY', 'gUIDO'] [s.capitalize() for s in data]
['Peter', 'Paul', 'Mary', 'Guido']
虽然这么做对于某些数据可能是有效的,但是假如数据中出现了缺失值,那么这样做就会引起异常,例如:
data = ['peter', 'Paul', None, 'MARY', 'gUIDO'] [s.capitalize() for s in data]
--------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-3-3b0264c38d59> in <module>() 1 data = ['peter', 'Paul', None, 'MARY', 'gUIDO'] ----> 2 [s.capitalize() for s in data] <ipython-input-3-3b0264c38d59> in <listcomp>(.0) 1 data = ['peter', 'Paul', None, 'MARY', 'gUIDO'] ----> 2 [s.capitalize() for s in data] AttributeError: 'NoneType' object has no attribute 'capitalize'
Pandas 为包含字符串的 Series 和 Index 对象提供的 str 属性堪称两全其美的方法,它既可以满足向量化字符串操作的需求,又可以正确地处理缺失值。例如,我们用前面的数据 data 创建了一个 Pandas 的 Series:
import pandas as pd names =