【Pandas-04】字符串操作

例如:36℃把36分割出来,并转成整形

数据['温度'].str.replace('℃','').astype('int64')

Pandas的字符串处理:

  1. 使用方法:先获取Series的str属性,然后在属性上调用函数;
  2. 只能在字符串列上使用,不能数字列上使用;
  3. Dataframe上没有str属性和处理方法
  4. Series.str并不是Python原生字符串,而是自己的一套方法,不过大部分和原生str很相似;
  5. 当然在pandas里面是object,不能是整型、时间类型等等。如果想对这些类型使用的话,必须先df["xx"].astype(str)转化一下,才能使用此方法。

   

一、字符串对象处理

1cat 和指定字符进行拼接

1)介绍

方式一:数据['合并1']=数据['姓名']+数据['性别']+数据['身份']

注意:若遇到非字符串的需要先转成字符串:astype或map函数

# 等价于以下语句,可以加sep参数分隔符

#但是注意哦,只能应用于series,不能使数据Dateframe!

方式二:数据['合并2']=数据['姓名'].str.cat(数据['性别'],sep=',').str.cat(数据['身份'],sep=',')

data_clean_df['wd_psm'] = raw_df['wd'].map(str) + '-' + raw_df['psm2'].map(str)

2)实例

2split 按照指定字符串分隔

1)介绍

  • print(数据['状态'].str.split()) # 不指定分隔符,就是一列表
  • print(数据['状态'].str.split('血',n=-1)) # 指定n,表示分隔次数,默认是-1,全部分隔
  • print(数据['状态'].str.split('血',expand=True))

# 注意这个expand,默认是False,得到是一个列表, 如果指定为True,会将列表打开,变成多列,变成DATAFrame

# 列名则是按照0 1 2 3····的顺序,并且默认Nan值分隔后还是为Nan

# 如果分隔符不存在,还是返回DATAFrame

rsplit和split用法一致,只不过默认是从右往左分隔

2)实例

3partition 按照指定字符分割

partition只会分隔一次

# 第一个元素:第一个分隔符之前的部分

# 第二个元素:分隔符本身

# 第三个元素:第一个分隔符之后的内容

# 如果有多个分隔符,也只会按照第一个分隔符分隔

print('BbBbB'.partition('b'))

print((数据['状态'].str.partition('平')))

# 上面两个情况结果是一样的

rpartition和partition类似,不过是默认是从右往左找到第一个分隔符

4、获取某列字符串的特定字符get

实例

5、获取某列特定字符串

print(数据['状态'].str.slice(0)) # 指定一个值的话,相当于[m:]

print(数据['状态'].str.slice(0,3)) # 相当于[m:n],从0开始不包括3

print(数据['状态'].str.slice(0,3,2)) # 相当于[m: n: step]

print(数据['状态'].str.slice(5,9,2)) # 索引越界,默认为空字符串,原来Nan还是Nan

举例

怎样提取201803这样的数字月份?

1、先将日期2018-03-31替换成20180331的形式

2、提取月份字符串201803

6、切片后替换slice_replace

print(数据['状态'].str.slice_replace(1,3,"520"))

# 将slice为[1:3]的内容换成"distance",既然替换,所以这里不支持步长。

7、每个字符中间串连内容join

join 将每个字符之间使用指定字符相连,相当于sep.join(list(value))

8、获取Seriesstr属性,然后使用各种字符串处理函数

9、使用strstartswithcontainsboolSeries可以做条件查询

10、字符串重复

11strip 按照指定内容,从两边去除

strip 按照指定内容,从两边去除,和python字符串内置的strip一样

lstrip rstrip类比python字符串的lstrip和rstrip

12translate 指定部分替换

字典 = str.maketrans({'距':'ju','离':'li'})

print(数据['里程'].str.translate(字典))

13、大小写转换

print(数据.str.lower()) # 所有字符转成小写

print(数据.str.upper()) # 所有字符转成大写

print(数据.str.title()) # 每一个单词的首字母大写

print(数据.str.capitalize()) # 第一个字母大写

print(s.str.swapcase()) # 大小写交换

14、判断 【返回TF

print(数据.str.isalpha()) # 是否全是字母

print(数据.str.isnumeric()) # 判断是否全是数字

print(数据.str.isalnum()) # 判断是否全是字母或者数字

# isdecimal只能用于Unicode数字

# isdigit用于Unicode数字,罗马数字

# isnumeric用于unicode数字,罗马数字,汉字数字

# 总的来说,isnumeric最广泛,但是实际项目中,一般很少会有这种怪异的数字出现

# 如果只是普通的阿拉伯数字,那么这三个方法基本上是一样的,可以互用

print(s4.str.isspace()) # 判断是否全是空格

print(s5.str.islower()) # 判断是否全是小写

print(s5.str.istitle()) # 判断每个单词的首字母是否是大写(其他字母小写)

二、使用正则表达式的处理

1match

match 和python正则中的match一样,是从头开始匹配的。返回布尔型,表示是否匹配给定的模式

print(数据['状态'].str.match(".{2}激"))

# NaN还是返回Nan,可按照 na= False 或 na = True 替换

2、日期替换

Series.str默认就开启了正则表达式模式

附件:字符串函数

   

posted @ 2021-04-14 20:42  忆凡人生  阅读(326)  评论(0编辑  收藏  举报