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'
)
newDF = df['name'].str.split(' ', 1, True)
newDF.columns = ['band', 'name']
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 = '|' #分隔符是|
)
3.2 单条件
newDF = df[df.comments > 10000]
3.3 多条件
newDF = df[df.comments.between(1000, 10000)]
3.4 过滤空值所在行
newDF = df[pandas.isnull(df.title)]
3.5 过滤空值所在行后取反~
newDF = df[~pandas.isnull(df.title)]
3.6 根据关键字过滤
newDF = df[df.title.str.contains('台电', na=False)]
3.7 ~为取反
newDF = df[~df.title.str.contains('台电', na=False)]
3.8 组合逻辑条件
newDF = df[(df.comments >= 1000) & (df.comments <= 10000)]