首页 > pandas 阅读数:21

pandas矢量化的字符串函数

在使用 pandas 的 DataFrame 数据框的过程中,如果需要处理一些字符串的特性,例如判断某列是否包含一些关键字或求某列的字符长度时,通过 Series 的 str 列内置的方法进行处理会很方便。下面将介绍 Series 类的 str 自带的方法。

cat() 字符串连接

cat() 函数可实现元素级的字符串连接操作,并可指定分隔符。其语法格式如下:

Series.str.cat(others=None, sep=None, na_rep=None)

该函数参数说明如下:
  • others:表示 Series、Index、DataFrame、np.ndarray(一维或二维)和其他类似字符串的列表;
  • sep:表示连接分隔符,取值 string 或 None,默认为 None;
  • na_rep:当 na_rep 为 None,序列中的 NaN 值将被忽略,如果指定,将用该字符代替。

split() 切分字符串

split() 函数可根据分隔符或正则表达式对字符串进行拆分。其语法格式如下:

Series.str.split(pat=None, n=-1, expand=False)

该函数参数说明如下:
  • pat:表示要拆分的字符串或正则表达式,如果未指定,则拆分空格;
  • n:表示限制输出中的分割数,无、0 和 -1 将被解释为返回所有拆分;
  • expand:将拆分的字符串展开为单独的列,如果为 True,则返回 DataFrame/MultiIndex 扩展维度;如果为 False,则返回包含字符串列表的 Series/Index。

get() 获取指定位置的字符串

get() 函数可获取各元素的第 i 个字符。其语法格式如下:

Series.str.get(i)

其中,参数i表示指定位置。

示例代码example1.py如下。
# -*- coding: utf-8 -*-
import numpy as np
import pandas as pd

#1 cat()
s = pd.Series(['a', 'b', np.nan, 'd'])
print(s.str.cat(['A', 'B', 'C', 'D'], sep=','))
print(s.str.cat(['A', 'B', 'C', 'D'], sep=',', na_rep='-'))

#2 split()
s = pd.Series(["this is good text", "but this is even better"])
print(s.str.split("is", n=1, expand=True))
#3 get()
s = pd.Series(["String",
              (1, 2, 3),
              ["a", "b", "c"],
              123, -456,
              {1:"Hello", "2":"World"}])
print(s.str.get(1))

除了 cat()、split() 和 get() 函数外,Series 类的 str 自带的其他函数,即矢量化的字符串函数见表 1,其函数语法格式是 Series.str .函数名(参数)。

表 1:矢量化的字符串函数
函数 说明
contains 返回表示各字符串时含有指定模式的布尔型数组
count 模式出现的次数
endswith 对各个元素执行 x.endswith(pattem)
startswith 对各个元素执行 x.startswith(pattem)
findall 计算各字符串的模式列表
join 根据指定的分隔符,将 Series 中各个元素的字符串连接起来
len 计算字符串长度
lower、upper lower 函数是将所有字符转换为小写;upper 函数是将所有字符转换为大写
match 根据指定的正则表达式对各个元素执行 re.match
pad 在字符串的左边或右边或两边添加空白符
center 相当于在字符串的两边添加空白符
repeat 重复值,如 s.str.repeat(3) 相当于对各个字符串执行 x * 3
replace 用指走字符串替换找到的模式
slice 对 Senes 的各个字符串进行子串截取
strip 去除两边空白符
Istrip 去除左边空白符
rstrip 去除右边空白符