先写个案例看看:
复制代码
1
2
3
4
5a = 'abcd' b = ['abc','cba','bca'] print(a.capitalize()) print([a.capitalize() for a in b])
复制代码
1
2
3Abcd ['Abc', 'Cba', 'Bca']
将它们的第一个字母变为大写,很简单的,也不是所有对象都可以使用capitalize(),里面如果有缺失数据的话就会导致报错,再看看Series函数:
复制代码
1
2
3
4a = [1,2,None,3] b = pd.Series(a) print(b + 5)
复制代码
1
2
3
4
5
6
7
8
9
100 6.0 1 7.0 2 NaN 3 8.0 dtype: float64
通常上面这种称为对象矢量化,矢量化后之前对象的None就变成NaN(一个特殊的浮点数),当然列表里的字符串也是可以矢量化的。
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13a = ['1','2',None,'3'] b = pd.Series(a) print(b) 0 1 1 2 2 None 3 3 dtype: object
可以看出来上面那个b所引用的对象就不再是列表了,而是一个把列表矢量化为Series类型的对象。对于这种Series对象,有str属性,下面有个capitalize():
复制代码
1
2
3
4
5
6
7
8
9
10
11a = ['abc','cba','bca'] b = pd.Series(a) print(b.str.capitalize()) 0 Abc 1 Cba 2 Bca dtype: object
上面那个b就是矢量化字符串后的Series对象。
复制代码
1
2
3
4
5
6
7b = pd.Series(['abc','cba','bca']) a = dir(str) #字符串对象的所有属性与方法的名称列表 c = dir(b.str) #矢量化字符串的所有属性与方法的名称列表 a1 = [i for i in a if '_' not in i] #删除特殊的属性与方法 c1 = [i for i in a if '_' not in i] #删除特殊的属性与方法 print(np.intersect1d(a1,c1)) #两者共有的方法名称
复制代码
1
2
3
4
5
6
7
8['capitalize' 'casefold' 'center' 'count' 'encode' 'endswith' 'expandtabs' 'find' 'format' 'index' 'isalnum' 'isalpha' 'isascii' 'isdecimal' 'isdigit' 'isidentifier' 'islower' 'isnumeric' 'isprintable' 'isspace' 'istitle' 'isupper' 'join' 'ljust' 'lower' 'lstrip' 'maketrans' 'partition' 'replace' 'rfind' 'rindex' 'rjust' 'rpartition' 'rsplit' 'rstrip' 'split' 'splitlines' 'startswith' 'strip' 'swapcase' 'title' 'translate' 'upper' 'zfill']
从上面可以看出来的,矢量化字符串对象与python中的内置的字符串对象,它们所有的方法名称大部分是相同的,可以多做几个案例加深理解:
复制代码
1
2
3
4
5a = pd.Series(['abc','cba','bca']) print(a.str.lower()) print(a.str.len()) print(a.str.split())
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
220 abc 1 cba 2 bca dtype: object 0 3 1 3 2 3 dtype: int64 0 [abc] 1 [cba] 2 [bca] dtype: object
对于字符串的操作,正则表达式有着不可替代的作用,对矢量化字符串也是一样的,具体正则表达式就不解释,下面写一个正则表达式的案例:
复制代码
1
2
3
4a = pd.Series(['123abcABC@','456cbaBCA@','4568bcaB']) b = '^[0-9A-Za-z]+@' print(a.str.match(b))
复制代码
1
2
3
4
5
6
7
80 True 1 True 2 False dtype: bool
上面就表示如果将a与b去进行匹配通过a.str.match(b)方法,如果符合检验要求则返回true,否则返回false。
下面页可以尝试一下对字符串进行切片和索引是否可以使用:
复制代码
1
2
3
4
5
6
7a = pd.Series(['abc','cba','bca']) print(a.str.lower()) print(a.str[2]) print(a.str.get(2)) print(a.str[:2]) print(a.str.slice(0,2))
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
360 abc 1 cba 2 bca dtype: object 0 c 1 a 2 a dtype: object 0 c 1 a 2 a dtype: object 0 ab 1 cb 2 bc dtype: object 0 ab 1 cb 2 bc dtype: object
这里字符串的索引与切片就不多讲,从上面可以看出来python对字符串的索引和切片,对于矢量化也是可以使用的,并且提供get()和slice()两个可以实现同样的功能。
最后
以上就是整齐水壶最近收集整理的关于第十五篇,数据分析之pandas的矢量化字符串的全部内容,更多相关第十五篇,数据分析之pandas内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复