美文网首页
python数据处理之Series及DataDrame字符串st

python数据处理之Series及DataDrame字符串st

作者: 越大大雨天 | 来源:发表于2019-03-30 11:38 被阅读0次

    pandas中长需要对数据本身字符进行一些操作,下面对Series和DataFrame的.str方法做了一些总结,主要包括:lower(),upper(),len(),startswith(),endswith(),count(),它们和普通字符串的操作方法几乎相同。

    • 字符串常用方法(1)
    # 字符串常用方法(1) - lower,upper,len,startswith,endswith
    
    s = pd.Series(['A','b','bbhello','123',np.nan])
    df = pd.DataFrame({'key1':list('abcdef'),
                      'key2':['hee','fv','w','hija','123',np.nan]})
    
    print(s.str.lower(),'→ lower小写\n')
    print(s.str.upper(),'→ upper大写\n')
    print(s.str.len(),'→ len字符长度\n')
    print(s.str.startswith('b'),'→ 判断起始是否为a\n')
    print(s.str.endswith('3'),'→ 判断结束是否为3\n')
    print(s.str.count("b")),'→ 字符‘b’出现的次数')
    
    df.columns = df.columns.str.upper()'→ df列名改为大写')
    df['key2'].str.upper()'→ df的key2列所有属性大写')
    

    输出:

    0          a
    1          b
    2    bbhello
    3        123
    4        NaN
    dtype: object → lower小写
    
    0          A
    1          B
    2    BBHELLO
    3        123
    4        NaN
    dtype: object → upper大写
    
    0    1.0
    1    1.0
    2    7.0
    3    3.0
    4    NaN
    dtype: float64 → len字符长度
    
    0    False
    1     True
    2     True
    3    False
    4      NaN
    dtype: object → 判断起始是否为a
    
    0    False
    1    False
    2    False
    3     True
    4      NaN
    dtype: object → 判断结束是否为3
    
    0    0.0
    1    1.0
    2    2.0
    3    0.0
    4    NaN
    dtype: float64
    
    • 字符串常用方法(2): str.strip()
    # 字符串常用方法(2) - strip
    
    s = pd.Series([' jack', 'jill ', ' jesse ', 'frank'])
    df = pd.DataFrame(np.random.randn(3, 2), columns=[' Column A ', ' Column B '],
                      index=range(3))
    print(s)
    print(df)
    print('-----')
    
    print(s.str.strip())  # 去除字符串中的空格
    print(s.str.lstrip())  # 去除字符串中的左空格
    print(s.str.rstrip())  # 去除字符串中的右空格
    
    df.columns = df.columns.str.strip()
    print(df)
    # 这里去掉了columns的前后空格,但没有去掉中间空格
    

    输出:

    0       jack
    1      jill 
    2     jesse 
    3      frank
    dtype: object
        Column A    Column B 
    0    0.647766    0.094747
    1    0.342940   -0.660643
    2    1.183315   -0.143729
    -----
    0     jack
    1     jill
    2    jesse
    3    frank
    dtype: object
    0      jack
    1     jill 
    2    jesse 
    3     frank
    dtype: object
    0      jack
    1      jill
    2     jesse
    3     frank
    dtype: object
       Column A  Column B
    0  0.647766  0.094747
    1  0.342940 -0.660643
    2  1.183315 -0.143729
    
    • 符串常用方法(3):str.replace()
    # 字符串常用方法(3) - replace
    
    df = pd.DataFrame(np.random.randn(3, 2), columns=[' Column A ', ' Column B '],
                      index=range(3))
    df.columns = df.columns.str.replace(' ','-')
    print(df)
    # 替换
    
    df.columns = df.columns.str.replace('-','hehe',n=1)
    print(df)
    # n:替换个数
    

    输出:

       -Column-A-  -Column-B-
    0    1.855227   -0.519479
    1   -0.400376   -0.421383
    2   -0.293797   -0.432481
       heheColumn-A-  heheColumn-B-
    0       1.855227      -0.519479
    1      -0.400376      -0.421383
    2      -0.293797      -0.432481
    
    • 字符串常用方法(4) : str.split()、str.rsplit()
    # 字符串常用方法(4) - split、rsplit
    
    s = pd.Series(['a,b,c','1,2,3',['a,,,c'],np.nan])
    print(s.str.split(','))
    print('-----')
    # 类似字符串的split
    
    print(s.str.split(',')[0])
    print('-----')
    # 直接索引得到一个list
    
    print(s.str.split(',').str[0])
    print(s.str.split(',').str.get(1))
    print('-----')
    # 可以使用get或[]符号访问拆分列表中的元素
    
    print(s.str.split(',', expand=True))
    print(s.str.split(',', expand=True, n = 1))
    print(s.str.rsplit(',', expand=True, n = 1))
    print('-----')
    # 可以使用expand可以轻松扩展此操作以返回DataFrame
    # n参数限制分割数
    # rsplit类似于split,反向工作,即从字符串的末尾到字符串的开头
    
    df = pd.DataFrame({'key1':['a,b,c','1,2,3',[':,., ']],
                      'key2':['a-b-c','1-2-3',[':-.- ']]})
    print(df['key2'].str.split('-'))
    # Dataframe使用split
    

    输出:

    0    [a, b, c]
    1    [1, 2, 3]
    2          NaN
    3          NaN
    dtype: object
    -----
    ['a', 'b', 'c']
    -----
    0      a
    1      1
    2    NaN
    3    NaN
    dtype: object
    0      b
    1      2
    2    NaN
    3    NaN
    dtype: object
    -----
         0     1     2
    0    a     b     c
    1    1     2     3
    2  NaN  None  None
    3  NaN  None  None
         0     1
    0    a   b,c
    1    1   2,3
    2  NaN  None
    3  NaN  None
         0     1
    0  a,b     c
    1  1,2     3
    2  NaN  None
    3  NaN  None
    -----
    0    [a, b, c]
    1    [1, 2, 3]
    2          NaN
    Name: key2, dtype: object
    
    • 字符串索引:
    s = pd.Series(['A','b','C','bbhello','123',np.nan,'hj'])
    df = pd.DataFrame({'key1':list('abcdef'),
                      'key2':['hee','fv','w','hija','123',np.nan]})
    
    print(s.str[0])  # 取第一个字符串
    print(s.str[:2])  # 取前两个字符串
    print(df['key2'].str[0]) 
    df.columns = df5.columns.str[:3]#列名切片更改
    print(df)
    # str之后和字符串本身索引方式相同
    

    输出:

    0      A
    1      b
    2      C
    3      b
    4      1
    5    NaN
    6      h
    dtype: object
    0      A
    1      b
    2      C
    3     bb
    4     12
    5    NaN
    6     hj
    dtype: object
    0      h
    1      f
    2      w
    3      h
    4      1
    5    NaN
    Name: key2, dtype: object
      key   key
    0   a   hee
    1   b    fv
    2   c     w
    3   d  hija
    4   e   123
    5   f   NaN
    

    简单的记住调用pandas的字符串方法只需先调用.str,后续具体的方法与普通字符串方法基本相同。

    相关文章

      网友评论

          本文标题:python数据处理之Series及DataDrame字符串st

          本文链接:https://www.haomeiwen.com/subject/darjbqtx.html