美文网首页
04.字段抽取/拆分&记录抽取

04.字段抽取/拆分&记录抽取

作者: 李慕玄 | 来源:发表于2018-07-01 17:54 被阅读0次

    1.字段抽取

    • 根据已知列的开始与结束位置,抽取出新的列
    • 字段截取函数slice(start, stop)
    • slice()函数只能处理字符型数据
    • start从0开始,取值范围前闭后开。
    from pandas import read_csv
    df = read_csv(
        '/users/bakufu/desktop/4.6/data.csv'        
    )
    Out[65]: 
               tel
    0  18922254812
    1  13522255003
    2  13422259938
    3  18822256753
    4  18922253721
    5  13422259313
    6  13822254373
    7  13322252452
    8  18922257681
    
    #使用`astype()`函数将数据转换为str型,并重新赋给原值
    df['tel'] = df['tel'].astype(str)
    Out[68]: 
    0    18922254812
    1    13522255003
    2    13422259938
    3    18822256753
    4    18922253721
    5    13422259313
    6    13822254373
    7    13322252452
    8    18922257681
    Name: tel, dtype: object
    
    #截取运营商数值
    bands = df['tel'].str.slice(0, 3)
    Out[70]: 
    0    189
    1    135
    2    134
    3    188
    4    189
    5    134
    6    138
    7    133
    8    189
    Name: tel, dtype: object
    
    #截取地区数值
    areas = df['tel'].str.slice(3, 7)
    Out[72]: 
    0    2225
    1    2225
    2    2225
    3    2225
    4    2225
    5    2225
    6    2225
    7    2225
    8    2225
    Name: tel, dtype: object
    
    #截取号码段数值
    nums = df['tel'].str.slice(7, 11)
    Out[74]: 
    0    4812
    1    5003
    2    9938
    3    6753
    4    3721
    5    9313
    6    4373
    7    2452
    8    7681
    Name: tel, dtype: object
    
    #赋值回去,原值由Series转换为DataFrame,并生成新的三列
    df['bands'] = bands
    df['areas'] = areas
    df['nums'] = nums
    Out[76]: 
               tel bands areas  nums
    0  18922254812   189  2225  4812
    1  13522255003   135  2225  5003
    2  13422259938   134  2225  9938
    3  18822256753   188  2225  6753
    4  18922253721   189  2225  3721
    5  13422259313   134  2225  9313
    6  13822254373   138  2225  4373
    7  13322252452   133  2225  2452
    8  18922257681   189  2225  7681
    

    2.字段拆分

    • 按固定的字符,拆分已有字符串
    • 字段分隔函数split(sep, n, expand=False)

    参数说明

    • sep:用于分割的字符串
    • n:分割为多少列,从0开始,如设置为0,即拆分为1列;如设置为1,则拆分为2列
    • expand:是否展开为数据框,默认为False

    expand返回值:

    • 如expand为True,返回DataFrame
    • 如expand为False,返回Series
    from pandas import read_csv
    df = read_csv(
        '/users/bakufu/desktop/4.7/data.csv'
    )
    
    屏幕快照 2018-07-01 19.52.26.png
    newDF = df['name'].str.split(' ', 1, True)
    newDF.columns = ['band', 'name']
    
    屏幕快照 2018-07-01 19.52.00.png

    3.记录抽取

    • 根据一定条件对数据进行抽取
    • 记录抽取函数dataframe[condition]
    • 参数说明:condition 过滤对条件
    • 返回值:DataFrame
    • 类似于Excel对过滤功能

    3.1 记录抽取常用的条件类型

    • 比较运算:> < >= <= !=
      例:df[df.comments>10]
    • 范围运算:between(left, right) 取值范围前闭后闭
      例:df[df.comments.between(10, 100)]
    • 空值匹配:pandas.isnull(column)
      例:df[pandas.isnull(df.title)]
    • 字符匹配:str.contains(patten, na=False)
      例:df[df.title.str.contains('台电', na=False)]
    • 逻辑运算:与(&) 或(|) 取反(not)
      例:df[(df.comments >= 10) & (df.comments <= 100)]
    import pandas
    df = pandas.read_csv(
        '/users/bakufu/desktop/4.8/data.csv',
        sep = '|'  #分隔符是|
    )
    
    屏幕快照 2018-07-02 06.06.22.png

    3.2 单条件

    newDF = df[df.comments > 10000]
    
    屏幕快照 2018-07-02 06.09.18.png

    3.3 多条件

    newDF = df[df.comments.between(1000, 10000)]
    
    屏幕快照 2018-07-02 06.10.39.png

    3.4 过滤空值所在行

    newDF = df[pandas.isnull(df.title)]
    
    屏幕快照 2018-07-02 06.11.48.png

    3.5 过滤空值所在行后取反~

    newDF = df[~pandas.isnull(df.title)]
    
    屏幕快照 2018-07-02 06.19.15.png

    3.6 根据关键字过滤

    newDF = df[df.title.str.contains('台电', na=False)]
    
    屏幕快照 2018-07-02 06.35.20.png

    3.7 ~为取反

    newDF = df[~df.title.str.contains('台电', na=False)]
    
    屏幕快照 2018-07-02 06.35.47.png

    3.8 组合逻辑条件

    newDF = df[(df.comments >= 1000) & (df.comments <= 10000)]
    
    屏幕快照 2018-07-02 06.36.41.png

    相关文章

      网友评论

          本文标题:04.字段抽取/拆分&记录抽取

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