9. 字符串的向量化操作

数据科学的处理离不开字符串的处理,相应的pandas也提供了字符串向量化操作的功能,我们一般利用这个来对采集来的信息进行清理。

我们可以使用python的方式来处理字符串,但是一旦字符串中包含缺省值,此时,使用pandas的字符串向量化功能就能避免出现崩溃的情况。

#
import pandas as pd

strs = ['One', "Two", "Three", None, "Four"]
strs = pd.Series(strs)
print(strs)
0      One
1      Two
2    Three
3     None
4     Four
dtype: object

9.1. 字符串向量化应用初步

#对字符串进行大写转换
s = strs.str.upper()
print(s)

# 对字符串进行小写转换
ss = strs.str.lower()
print("\n\n", ss)
0      ONE
1      TWO
2    THREE
3     None
4     FOUR
dtype: object


 0      one
1      two
2    three
3     None
4     four
dtype: object

9.2. 其他pandas字符串方法

python中字符串的方法基本上可以直接应用在pandas中,需要注意的是返回值的不同,需要相应做出调整,例如判断类的返回的是一个bool值的数据结构,len之类的返回的是一个值。

相应字符串方法不在一一举例,需要的时候可以查看手册。

9.3. 正则表达式

正则是字符串的大杀器,在pandas中同样也实现了正则的一些接口,如以下API:

  • match: 调用re.match, 返回bool类型内容
  • extract: 调用re.match, 返回匹配的字符串组groups
  • findall: 调用re.findall
  • replace: 正则的替换模式
  • contains: re.search,返回bool内容
  • count: 利用正则模式统计数量
  • split:等价于 str.split, 支持正则
  • rsplit: 等价于str.rsplit,支持正则
print("strs = \n", strs)

print()
a = strs.str.extract('([O, o, n, e, N, T ]+)')
print(a)
strs = 
 0      One
1      Two
2    Three
3     None
4     Four
dtype: object

     0
0  One
1    T
2    T
3  NaN
4    o

9.4. 其他字符串的使用方法

pandas还提供了一些其他的方法来实现字符串的操作。

  • get: 获取索引位置上的值,start=0
  • slice: 对元素进行切片
  • slice_replace: 对元素进行切片替换
  • cat: 连接字符串
  • repeat:重复元素
  • normalize: 将字符串转换为Unicode规范形式
  • pad: 在字符串的左边,右边或者两边增加空格
  • wrap:将字符串按照指定宽度换行
  • join: 用分隔符链接Series的每个元素
  • get_dummies: 按照分隔符提取每个元素的dummy变量,转换为one-hot编码的DataFrame
# 对slice的使用和函数的直接切片一个效果
# df.str.slice(2,5) 等于 df.str[2:5]
print("strs = \n", strs)

print()

a = strs.str.slice(1,4)
print(a)

print()
# 等价于
b = strs.str[1:4]
print(b)
strs = 
 0      One
1      Two
2    Three
3     None
4     Four
dtype: object

0      ne
1      wo
2     hre
3    None
4     our
dtype: object

0      ne
1      wo
2     hre
3    None
4     our
dtype: object
# df.str.get(i) 和 df.str[i]功能类似

# 以下案例用字母o切分字符串后选择后面的一组
a = strs.str.split('o').str.get(-1)
print(a)
0      One
1         
2    Three
3     None
4       ur
dtype: object

iii. v. get_dummies

如果数据中包含已经被编码的指标(coded indicator), 可以使用get_dummies快速的把编码的信息分解。

# 假定: A=游泳, B=爬山, C=跑步, D=篮球

df = pd.DataFrame({'english':strs,
                 'hobbies':["B|C", "A|C|D", "B|D", "A|B|C", "A|B|C|D"]})
print(df)

print()

a = df['hobbies'].str.get_dummies('|')
print(a)
  english  hobbies
0     One      B|C
1     Two    A|C|D
2   Three      B|D
3    None    A|B|C
4    Four  A|B|C|D

   A  B  C  D
0  0  1  1  0
1  1  0  1  1
2  0  1  0  1
3  1  1  1  0
4  1  1  1  1