美文网首页
文本数据

文本数据

作者: 58506fd3fbed | 来源:发表于2021-01-04 23:29 被阅读0次

1 str 对象

1.1 str 对象的设计意图

str 对象是定义在 Index 或 Series 上的属性,专门用于逐元素处理文本内容,其内部定义了大量方法,因此 对一个序列进行文本处理,首先需要获取其 str 对象。在 Python 标准库中也有 str 模块,为了使用上的便 利,有许多函数的用法 pandas 照搬了它的设计,例如字母转为大写的操作

1.2 [] 索引器

对于 str 对象而言,可理解为其对字符串进行了序列化的操作,例如在一般的字符串中,通过 [] 可以取出某个位置的元素,同时也能通过切片得到子串。通过对 str 对象使用 [] 索引器,可以完成完全一致的功能,并且如果超出范围则返回缺失值

1.3 string 类型

从 pandas 的 1.0.0 版本开始,引入了 string 类型,其引入的动机在于:原来所有的字符串类 型都会以 object 类型的 Series 进行存储,但 object 类型只应当存储混合类型,例如同时存储浮点、字符串、 字典、列表、自定义类型等,因此字符串有必要同数值型或 category 一样,具有自己的数据存放类型,从而 引入了 string 类型。

总体上说,绝大多数对于 object 和 string 类型的序列使用 str 对象方法产生的结果是一致,但是在下面提到 的两点上有较大差异:

首先,应当尽量保证每一个序列中的值都是字符串的情况下才使用 str 属性,但这并不是必须的,其必要条 件是序列中至少有一个可迭代(Iterable)对象,包括但不限于字符串、字典、列表。对于一个可迭代对象, string 类型的 str 对象和 object 类型的 str 对象返回结果可能是不同的。

总体上说,绝大多数对于 object 和 string 类型的序列使用 str 对象方法产生的结果是一致,但是在下面提到 的两点上有较大差异:

首先,应当尽量保证每一个序列中的值都是字符串的情况下才使用 str 属性,但这并不是必须的,其必要条 件是序列中至少有一个可迭代(Iterable)对象,包括但不限于字符串、字典、列表。对于一个可迭代对象, string 类型的 str 对象和 object 类型的 str 对象返回结果可能是不同的。

2 正则表达式基础

2.1 一般字符的匹配

正则表达式是一种按照某种正则模式,从左到右匹配字符串中内容的一种工具。对于一般的字符而言,它可 以找到其所在的位置,这里为了演示便利,使用了 python 中 re 模块的 findall 函数来匹配所有出现过但不重 叠的模式,第一个参数是正则表达式,第二个参数是待匹配的字符串。

3 文本处理的五类操作

3.1 拆分

str.split 能够把字符串的列进行拆分,其中第一个参数为正则表达式,可选参数包括从左到右的最大拆分次 数 n ,是否展开为多个列 expand 。

与其类似的函数是 str.rsplit ,其区别在于使用 n 参数的时候是从右到左限制最大拆分次数。但是当前版本 下 rsplit 因为 bug 而无法使用正则表达式进行分割:

3.2 合并

关于合并一共有两个函数,分别是 str.join 和 str.cat 。str.join 表示用某个连接符把 Series 中的字符串列表

连接起来,如果列表中出现了字符串元素则返回缺失值

str.cat 用于合并两个序列,主要参数为连接符 sep 、连接形式 join 以及缺失值替代符号 na_rep ,其中连接 形式默认为以索引为键的左连接

3.3 匹配

str.contains 返回了每个字符串是否包含正则模式的布尔序列

str.startswith 和 str.endswith 返回了每个字符串以给定模式为开始和结束的布尔序列,它们都不支持正则表 达式

如果需要用正则表达式来检测开始或结束字符串的模式,可以使用 str.match ,其返回了每个字符串起始处 是否符合给定正则模式的布尔序列

当然,这些也能通过在 str.contains 的正则中使用 ^ 和 $ 来实现

除了上述返回值为布尔的匹配之外,还有一种返回索引的匹配函数,即 str.find 与 str.rfind ,其分别返回从左 到右和从右到左第一次匹配的位置的索引,未找到则返回-1。需要注意的是这两个函数不支持正则匹配,只 能用于字符子串的匹配

3.4 替换

str.replace 和 replace 并不是一个函数,在使用字符串替换时应当使用前者。

当需要对不同部分进行有差别的替换时,可以利用 子组 的方法,并且此时可以通过传入自定义的替换函数 来分别进行处理,注意 group(k) 代表匹配到的第 k 个子组(圆括号之间的内容)

3.5 提取

提取既可以认为是一种返回具体元素(而不是布尔值或元素对应的索引位置)的匹配操作,也可以认为是一 种特殊的拆分操作。前面提到的 str.split 例子中会把分隔符去除,这并不是用户想要的效果,这时候就可以 用 str.extract 进行提取

通过子组的命名,可以直接对新生成 DataFrame 的列命名

str.extractall 不同于 str.extract 只匹配一次,它会把所有符合条件的模式全部匹配出来,如果存在多个结果, 则以多级索引的方式存储

4 常用字符串函数

除了上述介绍的五类字符串操作有关的函数之外,str 对象上还定义了一些实用的其他方法

4.1 字母型函数

upper, lower, title, capitalize, swapcase 这五个函数主要用于字母的大小写转化

4.2 数值型函数

这里着重需要介绍的是 pd.to_numeric 方法,它虽然不是 str 对象上的方法,但是能够对字符格式的数值进 行快速转换和筛选。其主要参数包括 errors 和 downcast 分别代表了非数值的处理模式和转换类型。其中, 对于不能转换为数值的有三种 errors 选项,raise, coerce, ignore 分别表示直接报错、设为缺失以及保持原来 的字符串

在数据清洗时,可以利用 coerce 的设定,快速查看非数值型的行

4.3 统计型函数

count 和 len 的作用分别是返回出现正则模式的次数和字符串的长度

4.4 格式型函数

格式型函数主要分为两类,第一种是除空型,第二种时填充型。其中,第一类函数一共有三种,它们分别是 strip, rstrip, lstrip ,分别代表去除两侧空格、右侧空格和左侧空格。这些函数在数据清洗时是有用的,特别 是列名含有非法空格的时候

对于填充型函数而言,pad 是最灵活的,它可以选定字符串长度、填充的方向和填充内容

上述的三种情况可以分别用 rjust, ljust, center 来等效完成,需要注意 ljust 是指右侧填充而不是左侧填充

在读取 excel 文件时,经常会出现数字前补 0 的需求,例如证券代码读入的时候会把”000007”作为数值 7 来处理,pandas 中除了可以使用上面的左侧填充函数进行操作之外,还可用 zfill 来实现

相关文章

网友评论

      本文标题:文本数据

      本文链接:https://www.haomeiwen.com/subject/bkegoktx.html