Datawhale-Pandas中文教程[9]

文本数据

文本数据类型处理–>pandas==1.0.0,其具有str对象的设计和string类型的引入两块内容。
本章知识点:str对象性质、正则表达式、文本处理五类操作、常用字符串函数

标准库的str模块

标准库str的内置函数可以分为以下4类:

对字符串不做修改

判断isalpha

startwith: 判断字符串是否以指定前缀开头
endwith: …指定后缀结尾…
isalnum: 判断是否是alpha+num格式[a-z][A-Z][0-9]

'fsj23289'.isalnum() # -> True
'fsj23@289'.isalnum() # -> False

isalpha: 判断是否是纯字母[a-z][A-Z]
isdigit: 判断数字格式[0-9]
islower: 判断小写字母格式[a-z]
isupper: 判断大写字母格式
istitle: 判断首字母是否大写[A-Z][a-z]?+(分隔符可以是空格问号加号)
isspace: 判断是否均为空格\s+

 '   \t \n \v'.isspace() # -> True

isascii: 判断是否是ascii码
isdecimal
isidentifier
isnumeric
isprintable
str.contains()

查找find和计数count

count: 返回字符串中出现子串的次数
find: 返回第一个匹配的子串的坐标,不存在字串时返回-1
index: 返回第一个匹配的子串的坐标,不存在子串时报错ValueError
rfind: 从右边匹配第一个子串的坐标,不存在子串时返回-1
rindex

对原字符串修改

大小写

lower: 出现特殊字符的时候可以使用casefold
upper
capitalize: 将所有单词首字母大写
title: 第一个字母大写
swapcase: 反转大小写

填充ljust

ljust: 使用指定字符,将字符串向右填充到指定长度,如果字符串已经有这么长则不填充,只能填充一个字符。
rjust: 使用指定字符,将字符串向左填充到指定长度;zfill: 在字符串左侧补零到指定长度
center: 使用指定字符,将字符串向两侧填充到指定长度

剥离strip

strip: 移除两侧的空格,如果指定chars,移除chars内的字符
lstrip: 移除左侧的空格
rstrip: 移除右侧的空格
下面这个例子没搞懂

'abcabcThisaaaaaaaa'.strip('abc') # -> 'This'
'abcabcThisaaaaaaaa'.lstrip('abc') # -> 'Thisaaaaaaaa'
'abcabcThisaaaaaaaa'.rstrip('abc') # -> 'abcabcThis'
替换和格式化format

replace: 将匹配的子串替换成新的指定字符串S.replace(old, new, count=-1)
S.expandtabs(tabsize=8): 将tab字符(也就是\t)转换成空格,相当于S.replace('\t', ' ')
translate&maketrans: 将匹配的子串替换成新的指定字符串

tab = str.maketrans('abcde', '12345')
'The match was abandoned because of bad weather'.translate(tab)
# -> 'Th5 m1t3h w1s 121n4on54 2531us5 of 214 w51th5r'

format: 将{}括起来的字符串替换为指定参数,format_map功能类似

map = {'a': 'not', 'b': 'my', 'who': 'jason'}
'this is {a} {b} string. it belongs to {who}.'.format_map(map)
# -> 'this is not my string. it belongs to jason.'
切分和合并

split(sep=None, maxsplit=-1): 默认使用空格分割,maxsplit指定最大分组个数,rsplit具有类似的用法,只是其默认从右边往左分割
S.join(<iterable>): 指定连接符将一个可迭代对象合并成一个字符串,返回一个数组

'^-^'.join(['this', 'is', 'not', 'my', 'string']
# -> 'this^-^is^-^not^-^my^-^string'

str.cat()

splitlines: 将字符串按照换行符分割,返回一个数组S.splitlines(keepends=False)

'this is not my string\n second line'.splitlines()
['this is not my string', ' second line']

S.partition(sep)rpartition: 将字符串按照指定字符分割成两半,返回一个元组

'this is not my string'.partition(' ')
('this', ' ', 'is not my string')
编码转换encode
In : '你好'.encode('gbk')
Out: b'\xc4\xe3\xba\xc3'
 
In : '你好'.encode('utf-8')
Out: b'\xe4\xbd\xa0\xe5\xa5\xbd'

待补充pd中的str相关函数和方法

pandas中的文本数据

str对象的设计

str对象是定义在IndexSeries上的属性,能对文本序列进行快速处理。
对一个序列进行文本处理,首先需要获取其str对象,pandas中的用法类似于python中的str模块

s = pd.Series(['abc', 'efg', 'hi'])
s.str
s.str.upper()

str对象方法一共有50个,其中有31个和标准库中的str模块中的方法同名且功能一致,同时在索引或切片方式上,它俩也具有高度相似性。

s.str[0]
s.str[-1: 0: -2]
s.str[2] # 第三个元素越界缺失
# 超出范围则返回缺失值

string类型

pandas从1.0.0开始引入了string类型,引入动机在于:原来所有字符串类型都会以object类型的Series进行存储,但object类型适用于存储混合类型,也就是同时存储不同的数据类型。字符串有必要拥有自己的数据存储类型。
尽量保证每一个序列中的值都是字符串,这种情况下再使用str对象。但是这是非必须的,如果对一个非字符串的对象进行索引或切片,string类型的str对象和object类型的str对象的返回结果可能是不同的。

s = pd.Series([{1: 'temp_1', 2: 'temp_2'}, ['a', 'b'], 0.5, 'my_string'])
s.str[0] # ->
0    None
1       a
2     NaN
3       m
dtype: object
s.astype('string').str[0] # ->
0    {
1    [
2    0
3    m
dtype: string

当序列类型为object时,其对每一个元素进行[]索引,因此对于第一个的字典而言,返回temp_1字符串;对第二个的列表而言,返回第二个值;对于第三个的不可迭代对象返回缺失值;对于第四个的字符串而言进行[]索引返回字符串的第二位字母y
string类型的str对象先把整个元素转为字面意义的字符串,再进行字符串的[]索引

两者的另一个差别在于,string类型是Nullable类型,但object不是。这意味着 string 类型的序列,如果调用的 str 方法返回值为整数 Series 和布尔 Series 时,其分别对应的 dtype 是 Int 和 boolean 的 Nullable 类型,而 object 类型则会分别返回 int/float 和 bool/object ,取决于缺失值的存在与否。同时,字符串的比较操作,也具有相似的特性, string 返回 Nullable 类型,但 object 不会

s = pd.Series(['a'])
s.str.len()
s.astype('string').str.len()
s == 'a'
s.astype('string') == 'a'
s = pd.Series(['a', np.nan]) # 带有缺失值
s.str.len()
s.astype('string').str.len()
s == 'a'
s.astype('string') == 'a'

练一练

a = pd.Series([1,2],[4,5])
a.str[::-1] # -> 报错
a.astype('string').str[::-1] # -> 子列表中的元素被翻转了

这个例子说明对于全体元素为数值类型的序列,无论其序列为什么类型,也不允许直接使用str对象,如果需要把数值类型当场string类型处理,可以使用astype()强制转换

正则表达式基础

参阅正则表达式必知必会
可以利用re模块的findall()函数来匹配所有出现过且不重叠的文本模式,其第一个参数为正则表达式,第二个参数为待匹配的字符串

# 从下面的字符串中找出Apple
reg, string = "Apple", "Apple! This Is an Apple!"
import re
re.findall(reg, string)
# 注意捕获模式不会重叠捕获

元字符

元字符是正则表达式中的特殊字符,它可以被大致分为4类:集合元字符、频次元字符、逻辑元字符和位置元字符
待补充

分组捕获与反向引用

待补充

零宽断言

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值