Pandas学习笔记--文本数据

一、string类型的性质

  1. string与object的区别
    string类型和object不同之处有三:
    ① 字符存取方法(string accessor methods,如str.count)会返回相应数据的Nullable类型,而object会随缺失值的存在而改变返回类型
    ② 某些Series方法不能在string上使用,例如: Series.str.decode(),因为存储的是字符串而不是字节
    ③ string类型在缺失值存储或运算时,类型会广播为pd.NA,而不是浮点型np.nan

  2. string类型的转换
    当下正确的方法是分两部转换,先转为str型object,在转为string类型:

import pandas as pd
import numpy as np
pd.Series([1,'1.']).astype('str').astype('string')
0     1
1    1.
dtype: string

二、拆分与拼接

主要有str.split和str.cat两种方法
拆分有 str.split方法,拼接用str.cat
str.split:

s = pd.Series(['a_b_c', 'c_d_e', np.nan, 'f_g_h'], dtype="string")
s
0    a_b_c
1    c_d_e
2     
3    f_g_h
dtype: string
s.str.split('_')
0    [a, b, c]
1    [c, d, e]
2         
3    [f, g, h]
dtype: object
pd.Series(['a_b_c', ['a','b','c']]).str[1]
0    _
1    b
dtype: object

str.split方法中expand参数控制了是否将列拆开,n参数代表最多分割多少次

s.str.split('_',expand=True,n=1)
0 1
0 a b_c
1 c d_e
2
3 f g_h

str.cat方法

s = pd.Series(['ab',None,'d'],dtype='string')
s
0      ab
1    
2       d
dtype: string
s.str.cat()
'abd'
s.str.cat(na_rep='*')
'ab*d'
s2 = pd.Series(['24',None,None],dtype='string')
s2
s.str.cat(s2)
0    ab24
1    
2    
dtype: string
s2 = pd.Series(list('abc'),index=[1,2,3],dtype='string')
s2
1    a
2    b
3    c
dtype: string

三、替换

广义上的替换,就是指str.replace函数的应用,fillna是针对缺失值的替换

s = pd.Series(['A', 'B', 'C', 'Aaba', 'Baca','', np.nan, 'CABA', 'dog', 'cat'],dtype="string")
s
0       A
1       B
2       C
3    Aaba
4    Baca
5        
6    
7    CABA
8     dog
9     cat
dtype: string
s.str.replace(r'^[AB]','***')#以A或者B开头的替换
0       ***
1       ***
2         C
3    ***aba
4    ***aca
5          
6      
7      CABA
8       dog
9       cat
dtype: string
s.str.replace(r'([ABC])(\w+)',lambda x:x.group(2)[1:]+'*')
0       A
1       B
2       C
3     ba*
4     ca*
5        
6    
7     BA*
8     dog
9     cat
dtype: string

str.replace的注意事项
首先,要明确str.replace和replace并不是一个东西:
str.replace针对的是object类型或string类型,默认是以正则表达式为操作,目前暂时不支持DataFrame上使用¶
replace针对的是任意类型的序列或数据框,如果要以正则表达式替换,需要设置regex=True,该方法通过字典可支持多列替换

四、子串匹配与提取

主要有下面几种方法

  1. str.extract方法
  2. str.extractall方法
    与extract只匹配第一个符合条件的表达式不同,extractall会找出所有符合条件的字符串,并建立多级索引
  3. str.contains和str.match
    前者的作用为检测是否包含某种正则模式
    str.match与其区别在于,match依赖于python的re.match,检测内容为是否从头开始包含该正则模式

你可能感兴趣的:(Pandas学习笔记--文本数据)