在pandas中,通过DataFrame来存储文件中的内容,其中最常见的数据类型就是字符串了。针对字符串,pandas提供了一系列的函数,来提高操作效率。 这些函数可以方便的操作字符串类型的Series对象,对数据框中的某一列进行操作,这种向量化的操作提高了处理效率。pandas中的字符串处理函数以str开头,常用的有以下几种 1. 大小写转换 通过str.lower和str.upper来实现,用法如下 >>> df = pd.DataFrame(['A', 'B', 'C', 'D']) >>> df 0 0 A 1 B 2 C 3 D >>> df[1] = df[0].str.lower() >>> df[2] = df[1].str.upper() >>> df 0 1 2 0 A a A 1 B b B 2 C c C 3 D d D 2. 去除空白 和内置的strip系列函数相同,pandas也提供了一系列的去除空白函数,用法如下 >>> df = pd.DataFrame([' A', ' B', 'C ', 'D ']) >>> df 0 0 A 1 B 2 C 3 D # str.strip, 去除字符串前后两端的空白 >>> df[0].str.strip().array <PandasArray> ['A', 'B', 'C', 'D'] Length: 4, dtype: object # str.lstrip, 去除字符串前端的空白 >>> df[0].str.lstrip().array <PandasArray> ['A', 'B', 'C ', 'D '] Length: 4, dtype: object # str.lstrip, 去除字符串后端的空白 >>> df[0].str.rstrip().array <PandasArray> [' A', ' B', 'C', 'D'] Length: 4, dtype: object 通过str.split实现,可以指定拆分的次数,用法如下 >>> df = pd.DataFrame(['A_1_1', ' B_2_1', 'C_3_1', 'D_4_1']) # 默认按照指定的分隔符进行拆分,结果为列表 >>> df[0].str.split('_') 0 [A, 1, 1] 1 [ B, 2, 1] 2 [C, 3, 1] 3 [D, 4, 1] Name: 0, dtype: object
# n参数,指定分隔的次数 >>> df[0].str.split('_', n = 1) 0 [A, 1_1] 1 [B, 2_1] 2 [C, 3_1] 3 [D, 4_1] Name: 0, dtype: object
# expand 参数默认为False, True表示返回值为数据框 >>> df[0].str.split('_', expand=True) 0 1 2 0 A 1 1 1 B 2 1 2 C 3 1 3 D 4 1 4. 替换 通过str.replace来实现,通过正则表达式来进行全局替换,用法如下 >>> df = pd.DataFrame(['A_1_1', 'B_2_1', 'C_3_1', 'D_4_1']) # 第一个参数为需要替换的值 # 第二个参数为替换后的值 >>> df[0].str.replace('_', '-') 0 A-1-1 1 B-2-1 2 C-3-1 3 D-4-1 Name: 0, dtype: object
# 用正则表达式来进行替换 >>> df[0].str.replace('[\d_]+', '') 0 A 1 B 2 C 3 D Name: 0, dtype: object
# regex参数的默认值为True, 表示第一个参数为正则表达式 # 当值为False时,表示第一个参数为常规的字符串 >>> df[0].str.replace('_', '-', regex=False) 0 A-1-1 1 B-2-1 2 C-3-1 3 D-4-1 Name: 0, dtype: object 5. 拼接 通过str.cat函数来实现,用法如下 >>> import pandas as pd >>> df = pd.DataFrame(['A', 'B', 'C', 'D']) >>> df 0 0 A 1 B 2 C 3 D # 单个Series对象,将所有数据拼接在一起 >>> df[0].str.cat() 'ABCD' # sep参数制定分隔符 >>> df[0].str.cat(sep=',') 'A,B,C,D'
# 当两个数组拼接时,返回一个新的Series对象 >>> df[0].str.cat(['1','2', '3', '4']) 0 A1 1 B2 2 C3 3 D4 Name: 0, dtype: object
# 当拼接的对象为一个数据框时,将数据框的所有列都进行拼接 >>> df[1] = df[0].str.cat(['1','2', '3', '4']) >>> df 0 1 0 A A1 1 B B2 2 C C3 3 D D4 >>> df[0].str.cat(df) 0 AAA1 1 BBB2 2 CCC3 3 DDD4 Name: 0, dtype: object 6. 判断是否包含子字符串 通过str.contain函数来实现局部查找,类似re.search函数,用法如下 >>> df = pd.DataFrame(['A_1_1', 'B_2_1', 'C_3_1', 'D_4_1']) >>> df 0 0 A_1_1 1 B_2_1 2 C_3_1 3 D_4_1
>>> df[0].str.contains('1') 0 True 1 True 2 True 3 True Name: 0, dtype: bool
>>> df[0].str.contains('\w+') 0 True 1 True 2 True 3 True Name: 0, dtype: bool 用str.match函数来实现从头开始的全局查找,类似re.match函数,用法如下>>> df[0].str.match('1') 0 False 1 False 2 False 3 False Name: 0, dtype: bool
>>> df[0].str.match('\w+') 0 True 1 True 2 True 3 True Name: 0, dtype: bool 7. 提取子字符串 通过str.extract和str.extractall函数来实现,用法如下 >>> df = pd.DataFrame(['A_1_1', 'B_2_1', 'C_3_1', 'D_4_1']) >>> df 0 0 A_1_1 1 B_2_1 2 C_3_1 3 D_4_1
# extract函数只提取一次符合匹配模式的字符串 >>> df[0].str.extract(r'(\w)_(\d)') 0 1 0 A 1 1 B 2 2 C 3 3 D 4 # 用下述写法指定数据框的表头 >>> df[0].str.extract(r'(?P<letter>\w)_(?P<digist>\d)') letter digist 0 A 1 1 B 2 2 C 3 3 D 4 # extractall提取一个字符串中所有符合模式的字符串 # 返回值为一个行为多重索引的数据框 # match表示匹配的顺序,从0开始计数 >>> df[0].str.extractall(r'(?P<letter>\w)_(?P<digist>\d)') letter digist match 0 0 A 1 1 0 B 2 2 0 C 3 3 0 D 4 以上是部分常用的字符串函数,完整的字符串处理函数请查看官方的API文档。
|