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

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容