Pandas文本处理

文章目录

  • 1、文本格式
  • 2、对齐方式
  • 3、字符拆分
    • (1)split()方法
    • (2)slice切片
    • (3)partition()方法
  • 4、字符替换
    • (1)replace方法
    • (2)切片替换
  • 5、字符拼接
  • 6、字符提取
  • 7、文本查询
    • (1)find()方法
    • (2)findall()方法
  • 8、文本包含
  • 9、字符统计
  • 10、类别判断

Pandas 为 文本处理提供了 str 属性,通过该属性可以自动跳过缺失/NA 值对每个元素进行操作。
使用str 属性时需注意一下几点:

  1. 只有Series数据结构才能使用str 属性。
  2. 访问的对象是字符类型。
  3. 一个语句可以使用多个该属性。series.str.lower().str.title()

1、文本格式

转为小写字母:Series.str.lower()
转为大写字母:Series.str.upper()
转为标题:Series.str.title()将每个单词的首字母转为大写
首字母大写:Series.str.ccapitalize()
大小写互换:Series.str.swapcase()
转为小写字母(支持其他语言):Series.str.casefold()

2、对齐方式

Series.str.center(10,fillchar='一') #居中对齐,宽度为10,用“一”填充
Series.str.ljust(10,fillchar='一') #左对齐
Series.str.rjust(10,fillchar='一') #右对齐
Series.str.ljust(width=10,size='left',fillchar='一') #指定宽度,填充内容对齐方式,填充内容
Series.str.zfill(3) # 填充对齐,不足3位的前面加0

3、字符拆分

(1)split()方法

Series.str.split() # 
Series.str.split('-').get(1)  / Series.str.split('-').str[1]  # 读取切分后的字符
Series.str.split('-',expand=True) # 将返回的列表展开
Series.str.split('-',expand=True,n=1) # 限制切分次数
Series.str.rplit('-',expand=True,n=1) # 从字符串尾部向首部切分

(2)slice切片

Series.str.slice(1) #切掉第一个字符,留下剩余字符
Series.str.slice(stop=2)   # 切掉索引为1之后的元素
Series.str.slice(start=0,stop=5,step=3)  

(3)partition()方法

Series.str.partition()  # 从右开始划分三部分,默认分隔符为空格,expand默认True
Series.str.partition('-') 
Series.str.partition('-',expand=False) # 将划分的结果转为一个元组列的Series

4、字符替换

字符替换有以下几种方法:

(1)replace方法

Series.str.replace(pat, repl, n= -1, case= None, flags= 0, regex= None)
# pat:匹配模式,可以是正则表达式也可以是re.compile()
# repl:新字符,可以是可迭代数据类型也可以是函数,
# n:替换次数,默认-1,替换全部
# case:确定替换是否区分大小写
# flags:正则表达式模块标志
# regex:确定是否假设passed-in模式是正则表达式
s=pd.Series(['abc123','fknf','hello world','12'])
s=s.str.replace('[a-z]+','0',regex=True)
def repl(a):
    print(a)
    return a.group(0)[::-1]
def repl1(a):
    print(a)
    return a.group("two").swapcase()
print(pd.Series(["English", "chi 11 baz", 'poi'], dtype="string").str.replace(r"(?P\w+) (?P\w+) (?P\w+)", repl1, regex=True))
print(pd.Series(["190 ole", "olu", 'cba'], dtype="string").str.replace(r"[a-z]+", repl, regex=True))

(2)切片替换

Series.str.slice_replace(start=None, stop=None, repl=None) # 替换为其他字符串
# start:替换次数
# stop:确定替换是否区分大小写
# repl:确定是否假设passed-in模式是正则表达式

5、字符拼接

Series.str.cat(others=None, sep=None, na_rep=None, join='left')
others:需要拼接的数据,该数据的长度必须跟Series对象相同
sep :拼接用的分隔符
join :连接方式,值的范围 {‘left’, ‘right’, ‘outer’, ‘inner’}

例子:

pd.Series(['a', 'b', np.nan, 'd']).str.cat(sep=' ', na_rep='?') 
'a b ? d' # 结果
pd.Series(['a', 'b', np.nan, 'd']).str.cat(['A', 'B', 'C', 'D'], sep=',').str.cat(['1', '2', '3', '4'], sep='-')
0    a,A-1  #结果
1    b,B-2
2      NaN
3    d,D-4

6、字符提取

Series.str.extract(pat, flags= 0, expand= True)
pat:正则表达式
flags:正则库re中的标识,re.IGNORECASE
expand:是否展开内容返回DataFrame

7、文本查询

(1)find()方法

Series.str.find(sub,start,end)
sub:要查找字符

pandas.Series(['fsfg','safas']).str.find('sa')
0   -1
1    0
pandas.Series(['fsfg','safas']).str.find('sa',2)
0   -1
1   -1
pandas.Series(['[email protected]','[email protected]','[email protected]']).str.findall('(.*?)@(.*).com')

(2)findall()方法

Series.str.findall(pat, flags= 0, expand= True)
pat:正则表达式
flags:正则库re中的标识,re.IGNORECASE
expand:是否展开内容返回DataFrame

pd.Index(['Mouse', 'dog', 'house and parrot', '23.0', np.NaN]).str.contains('house|dog', regex=True)
0    False
1     True
2     True
3    False
4      NaN
pd.Index(['Mouse', 'dog', 'house and parrot', '23.0', np.NaN]).str.contains('\\d', regex=True)
0    False
1    False
2    False
3     True
pandas.Series(['[email protected]','[email protected]','[email protected]']).str.findall('(.*?)@(.*).com')
# 0       [(1234, qq)]
# 1    [(python, 163)]
# 2     [(java, java)]

8、文本包含

Series.str.contains(pat, case=True, flags=0, na=None, regex=True)
pat: 匹配字符串或正则表达式
case: 是否区分大小写
flags: 正则库re中的标识,re.IGNORECASE
na: 对缺失值填充
regex: 是否支持正则

9、字符统计

Series.str.count('a')  / Series.str.count(r'a|b|c')
Series.str.len()

10、类别判断

Series.str.isalpha()  # 所有字符是否都是字母
Series.str.isnumeric() #检测字符串是否由数字组成
Series.str.isalnum()  # 所有是否字母或数字组成
Series.str.isdigit() # 所有是否为数字
Series.str.isdecimal() # 检查字符串中是否只含有十进制字符
Series.str.isspace() # 所有是否空格
Series.str.islower() # 所有是否小写
Series.str.isupper() # 所有是否大写
Series.str.istitle() # 所有是否标题格式

你可能感兴趣的:(Pandas,python)