Pandas08--文本数据


1 str对象

1.1 str基础

  • str对象的设计意图
    • 作用:str对象是定义在 Index 或 Series上的属性,专门用于逐元素处理文本内容,其内部定义了大量方法。
    • 使用:对一个序列进行文本处理,首先需要获取其str对象。

    注意:在Python标准库中也有 str 模块,为了使用上的便利,有许多函数的用法 pandas照搬了它的设计

    • 【例子】字母转为大写的操作
    var = 'abcd'
    str.upper(var) # Python内置str模块
    # 'ABCD'
    
    s=pd.Series(['abcd','efg','hi'])
    s.str.upper() # pandas中str对象上的upper方法
    '''
    0    ABCD
    1     EFG
    2      HI
    dtype: object
    '''
    
  • []索引器
    • 作用: 对于 str 对象而言,可理解为其对字符串进行了序列化的操作

    注意:如果超出范围则返回缺失值

    • 【例子】通过 [] 取出某个位置的元素
    var[0]
    # 'a'
    var[-1:0:-2] # 通过切片得到子串
    # 'db'
    
    s.str[0]
    '''
    0    a
    1    e
    2    h
    dtype: object
    '''
    s.str[-1: 0: -2]
    '''
    0    db
    1     g
    2     i
    dtype: object
    '''
    s.str[2]
    '''
    0      c
    1      g
    2    NaN
    dtype: object
    '''
    

1.2 string类型

  • stringobject:在string未引入之前,所有的字符串类型都以object类型的Series进行存储,但object类型只应该存储混合类型,比如同时存储字符串、字典、列表等,因此字符串要有自己的数据类型,因此引入string类型。
    因此,绝大多数对于objectstring类型的序列使用str 对象方法产生的结果是一致,除了下面提到的两点
  • 区别一:
    • 区别点: 对于一个可迭代对象,string类型的 str 对象和object 类型的 str对象返回结果可能是不同的
    • 使用str属性:首先,应当尽量保证每一个序列中的值都是字符串的情况下才使用 str属性,但这并不是必须的,其必要条件是序列中至少有一个可迭代(Iterable)对象,包括但不限于字符串、字典、列表。
    • 【例子】
    s = pd.Series([{
         1: 'temp_1', 2: 'temp_2'}, ['a', 'b'], 0.5, 'my_string'])
    s.str[1] # 按每个元素进行索引
    '''
    0    temp_1
    1         b
    2       NaN
    3         y
    dtype: object
    '''
    s.astype('string').str[1] # 把每个元素转为字符串
    '''
    0    1
    1    '
    2    .
    3    y
    dtype: string
    '''
    
    分析:
    • 当序列类型为object时,是对于每一个元素进行[]索引,因此对于字典而言,返回temp_1字符串,对于列表则返回第二个值,而第三个为不可迭代对象,返回缺失值,第四个是对字符串进行[]索引。
    • string 类型的str对象先把整个元素转为字面意义的字符串,例如对于列表而言,第一个元素即 “{ “,而对于最后一个字符串元素而言,恰好转化前后的表示方法一致,因此结果和object类型一致。
  • 区别二:
    • 区别点: string 类型是 Nullable 类型,但 object 不是
    • 导致的结果:
      string 类型的序列,如果调用的 str 方法返回值为整数Series布尔 Series时,其分别对应的 dtypeInbooleanNullable 类型
      object 类型则会分别返回int/floatbool/object ,取决于缺失值的存在与否
      同时,字符串的比较操作,也具有相似的特性, string 返回Nullable 类型,但object 不会。
      -【例子】
    s = pd.Series(['a'])
    
    s.str.len()
    s.astype('string').str.len()
    '''
    0    1
    dtype: Int64
    '''
    
    s = pd.Series(['a', np.nan]) # 带有缺失值
    s.str.len()
    '''
    0    1.0
    1    NaN
    dtype: float64
    '''
    s.astype('string').str.len()
    '''
    0       1
    1    <NA>
    dtype: Int64	
    '''
    
    s == 'a'
    '''
    0     True
    1    False
    dtype: bool	
    '''
    
    s.astype('string') == 'a'
    '''
    0    True
    1    <NA>
    dtype: boolean
    '''
    

    注意:对于全体元素为数值类型的序列,即使其类型为object 或者 category也不允许直接使用str属性。如果需要把数字当成 string类型处理,可以使用astype强制转换为 string类型的 Series

    s = pd.Series([12, 345, 6789])
    s.astype('string').str[1]
    '''
    0    2
    1    4
    2    7
    dtype: string
    '''
    

2 正则表达式基础

  • 正则表达式:正则表达式是一种按照某种正则模式,从左到右匹配字符串中内容的一种工具。
  • 一般字符的匹配:对于一般的字符而言,它可以找到其所在的位置
    • 函数:使用了pythonre模块的 findall 函数来匹配所有出现过但不重叠的模式,第一个参数是正则表达式,第二个参数是待匹配的字符串。
    • 【例子】在下面的字符串中找出 apple
    import re
    re.findall(r'Apple', 'Apple! This Is an Apple!')
    # ['Apple', 'Apple']
    
  • 元字符基础:
元字符 描述
. 匹配除换行符以外的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值