zoukankan      html  css  js  c++  java
  • 【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默认就开启了正则表达式模式

    附件:字符串函数

       

  • 相关阅读:
    排序算法总结
    设计模式---(简单工厂模式,工厂模式,抽象工程模式),单例模式,代理模式,装饰器
    网易编程题——牛牛的闹钟
    Python + sqlalchemy + Pandas + Mysql 实现自动创建表,插入数据
    cucumber
    加油
    重新学习python爬虫
    python 网址
    《高兴》 贾平凹 摘抄
    funny python
  • 原文地址:https://www.cnblogs.com/yifanrensheng/p/14659796.html
Copyright © 2011-2022 走看看