文本分隔 对文本的分隔和替换是最常用的文本处理方式。对文本分隔后会生成一个列表,我们对列表进行切片操作,可以找到我们想要的内容。分隔后还可以将分隔内容展开,形成单独的行。下例以下划线对内容进行了分隔,分隔后每个内容都成为一个列表。分隔对空值不起作用。 # 构造数据 s = pd.Series(['天_地_人', '你_我_他', np.nan, '风_水_火'], dtype="string") s ''' 0 天_地_人 1 你_我_他 2 <NA> 3 风_水_火 dtype: string ''' # 用下划线分隔 s.str.split('_') ''' 0 [天, 地, 人] 1 [你, 我, 他] 2 <NA> 3 [风, 水, 火] dtype: object ''' 分隔后可以使用get或者[]来取出相应内容,不过[]是Python列表切片操作,更加灵活,不仅可以取出单个内容,也可以取出由多个内容组成的片段。 # 取出每行第二个 s.str.split('_').str[1] # get只能传一个值 s.str.split('_').str.get(1) ''' 0 地 1 我 2 <NA> 3 水 dtype: object ''' # []可以使用切片操作 s.str.split('_').str[1:3] s.str.split('_').str[:-2] # 如果不指定分隔符,会按空格进行分隔 s.str.split() # 限制分隔的次数,从左开始,剩余的不分隔 s.str.split(n=2) 11.3.2 字符分隔展开 在用.str.split()将数据分隔为列表后,如果想让列表共同索引位上的值在同一列,形成一个DataFrame,可以传入expand=True,还可以通过n参数指定分隔索引位来控制形成几列,见下例: # 分隔后展开为DataFrame s.str.split('_', expand=True) ''' 0 1 2 0 天 地 人 1 你 我 他 2 <NA> <NA> <NA> 3 风 水 火 ''' # 指定展开列数,n为切片右值 s2.str.split('_', expand=True, n=1) ''' 0 1 0 天 地_人 1 你 我_他 2 <NA> <NA> 3 风 水_火 ''' rsplit和split一样,只不过它是从右边开始分隔。如果没有n参数,rsplit和split的输出是相同的。 # 从右分隔为两部分后展开为DataFrame s.str.rsplit('_', expand=True, n=1) ''' 0 1 0 天_地 人 1 你_我 他 2 <NA> <NA> 3 风_水 火 ''' 对于比较复杂的规则,分隔符处可以传入正则表达式: # 数据 s = pd.Series(["你和我及他"]) # 用正则表达式代表分隔位 s.str.split(r"\和|及", expand=True) ''' 0 1 2 0 你 我 他 ''' 11.3.3 文本切片选择 使用.str.slice()将指定的内容切除掉,不过还是推荐使用s.str[]来实现,这样我们只学一套内容就可以了: s = pd.Series(["sun", "moon", "star"]) ''' 0 sun 1 moon 2 star dtype: object ''' # 以下切掉第一个字符 s.str.slice(1) s.str.slice(start=1) ''' 0 un 1 oon 2 tar dtype: object ''' 以下是一些其他用法的示例: s.str.slice() # 不做任何事 # 切除最后一个以前的,留下最后一个 s.str.slice(start=-1) # s.str[-1] # 切除第二位以后的 s.str.slice(stop=2) # s.str[:2] # 切除步长为2的内容 s.str.slice(step=2) # s.str[::2] # 切除从头开始,第4位以后并且步长为3的内容 # 同s.str[0:5:3] s.str.slice(start=0, stop=5, step=3) 11.3.4 文本划分 .str.partition可以将文本按分隔符号划分为三个部分,形成一个新的DataFrame或者相关数据类型。 # 构造数据 s = pd.Series(['How are you', 'What are you doing']) ''' 0 How are you 1 What are you doing dtype: object ''' # 划分为三列DataFrame s.str.partition() ''' 0 1 2 0 How are you 1 What are you doing ''' 其他的操作方法如下: # 从右开始划分 s.str.rpartition() ''' 0 1 2 0 How are you 1 What are you doing ''' # 指定字符 s.str.partition("are") ''' 0 1 2 0 How are you 1 What are you doing ''' # 划分为一个元组列 s.str.partition("you", expand=False) ''' 0 (How are , you, ) 1 (What are , you, doing) dtype: object ''' # 对索引进行划分 idx = pd.Index(['A 123', 'B 345']) idx.str.partition() ''' MultiIndex([('A', ' ', '123'), ('B', ' ', '345')], ) '''标签:What,slice,分隔,python,dtype,切片,split,str,pandas From: https://www.cnblogs.com/xkdn/p/17992472