前言:本文是学习网易微专业的《python全栈工程师》 中的《数据分析 - 机器学习工程师》专题的课程笔记,欢迎学习交流。
一、课程目标
- 掌握矢量化字符串的常用方法
二、详情解读
2.1.矢量化
- 将序列类对象转化为
Series
类
–Series
的str
属性
– 避免循环语句
– 对字符串的处理能力更强
2.1.1.矢量化字符串
必要性:
将列表中字符串首字母大写
names = ['newton', 'hertz', 'curie']
[name.capitalize() for name in names]
运行结果:
但是,当列表中有缺失值None
时,上述的方法将不再适用,下面的操作会报错:
names2 = ['newton', 'hertz', None, 'curie']
[name.capitalize() for name in names2]
解决方案:将列表转化为Series
对象,即将其矢量化。
import pandas as pd
# 矢量化
snames = pd.Series(names2)
snames
运行结果:
使用Series
对象的str
属性进行操作,列表中的None
不会影响到操作:
snames.str.capitalize()
运行结果:
说明:矢量化字符串在避免for
循环的同时,序列中有缺失值的情况,执行也不会受影响。
2.1.2.python
内置字符串方法与矢量化字符方法的比较
import numpy as np
# 字符串对象的所有属性和方法的名称列表
a = dir(str)
# 矢量化字符串的所有属性和方法的名称列表
b = dir(snames.str)
# 去掉特殊属性和方法
da = [i for i in a if '_' not in i]
db = [i for i in b if '_' not i i]
# 两者共有的方法名称
share = np.intersect1d(da, db)
print(share)
运行结果:
示例:将列表中的字符串转化为小写
phy = ['issac newton', 'albert Einstein', 'Max Karl Planck', 'Wilhelm rontgen']
phy = pd.Series(phy)
phy.str.lower()
运行结果:
phy.str.len()
运行结果:
phy.str.split()
运行结果:
2.1.3.正则表达式检验邮箱格式:
phy_mail = pd.Series(['new@itdiffer.com', 'ein@itdiffer.com', 'pla@itdiffer.com', 'ron@itdiffer.com'], index=phy)
phy_mail['laoqi'] = np.NaN
phy_mail
运行结果:
email_str = '^[a-zA-Z0-9._%+]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,4}$'
phy_mail.str.match(email_str)
运行结果:
2.1.4.当使用索引下标时,得到的不是样本,而是获取字符串中的字符:
# 获取所有样本的第二个字符
phy.str[2]
# 下面这种方法跟上面的一样
phy.str.get(2)
运行结果:
而原来的数据样本是这样的:
如果下标索引值超过了字符串的长度,则会返回NaN
:
phy.str[14]
运行结果:
2.1.5.矢量化字符串的切片:
# 方法一:
phy.str[:5]
# 方法二:
phy.str.slice(0, 5)
2.1.6.练习
df = pd.DataFrame(np.random.randn(3, 2),
columns=[' Column A ', ' Column B '],
index=range(3))
df
练习一:去掉特征中两侧的空格:
df.columns.str.strip()
练习二:将特征名称小写
df.columns.str.lower()
上面的操作都不影响原来DataFrame
中的对象名称,如果想改变原来的名称,可以对名称重新赋值,如下操作:
df.columns = df.columns.str.strip().str.lower().str.replace(' ', '_')
三、课程小结
- 01 字符串矢量化方法
共有条评论 网友评论