开头
再对导入的数据进行清洗和相应的转换之后,我们就需要进一步的对我们所需要的数据进行抽取、合并和简单计算。今天我们就来聊一下这三步,然后数据处理部分就大致结束了,可以开始进行数据分析。
1.数据抽取
数据抽取,也叫做数据拆分,它是指保留,抽取原数据表中的某些数据形成一个新的数据表,主要方法有字段拆分、记录抽取和随机抽取。
1.1字段拆分
抽取某一字段的部分信息,形成一个新的字段
1.1.1按位置拆分
在pandas中我们按位置提取拆分某一段数据可以用str.slice函数(只能处理字符型数据)
它只有两个参数,起始位置和终止位置,不包括终止位置的值
import pandas as pd
#导入数据
data=pd.read_csv('D:/字段拆分.csv',encoding='GBK')
#查看数据
print(data)
#确认没有缺失后将号码列的数据转换成字符型
data['号码']=data['号码'].astype(str)
#号码前三位为运营商编码
data['运营商编码']=data['号码'].str.slice(0,3)
#接下来四位是所在地区的编码
data['地区编码']=data['号码'].str.slice(3,7)
#最后四位是用户编码
data['用户编码']=data['号码'].str.slice(7,11)
#查看添加切分编码后的数据
print(data)
1.1.2按分隔符拆分
按分隔符来拆分我们常用split函数
它主要有三个参数
pat:分隔符,默认为空格
n:分割为n+1列,默认为-1代表返回所有分隔列
expand:是否展开为数据框,默认为False
import pandas as pd
#导入数据
data=pd.read_csv('D:/字段拆分.csv',encoding='GBK')
#查看数据
print(data)
newdata=data['商品名'].str.split(' ',1,True)
newdata.columns=['公司名','商品名']
1.1.3时间属性的拆分
时间属性是数据处理中常常需要处理的地方,如何将原数据上的时间变成我们更需要的样式提取出来就需要时间属性的拆分。
一般先用to_datetime函数将相应数据转换为时间型变量,再提取相应的数据信息
to_datetime函数可以看第三天结尾的内容
import pandas as pd
time=pd.read_csv('D:/时间处理.csv',encoding='GBK')
time['时间']=pd.to_datetime(time.注册时间,format='%Y/%m/%d %H:%M:%S')
time['年']=time['时间'].dt.year
time['月']=time['时间'].dt.month
time['周']=time['时间'].dt.weekday
time['日']=time['时间'].dt.day
time['时']=time['时间'].dt.hour
time['分']=time['时间'].dt.minute
time['秒']=time['时间'].dt.second
1.2记录抽取
根据指定条件对数据进行抽取,类似于筛选功能
1.2.1关键字抽取
对数据中的关键字进行提取,使用contains函数
常用参数有三个
pat:要提取的关键字
case:是否忽略大小写,默认为True
na:缺失值填充为,默认为NaN
1.2.2空值抽取
可以用isnull函数抽取特定列数值为空的行信息
1.2.3数据范围抽取
一般用<,>,<=,>=,!=,也可以用between函数
between(left,right,inclusive=True)
left为最小值,right为最大值,inclusive是否包含最小值和最大值,默认为True
# -*- coding: utf-8 -*-
import pandas as pd
#导入数据
data=pd.read_csv('D:/数据处理.csv',encoding='GBK')
#关键字抽取,使用contains函数
#找到所有男性信息
male=data[data.性别.str.contains('男',na=False)]
#对年龄空值抽取,使用isnull函数
null=data[data.年龄.isnull()]
#对数据范围抽取,找到年龄大于25岁人的信息
older=data[data.年龄>25]
#找到年龄在25和28之间人的信息
mid=data[data.年龄.between(25,28)]
我们还可以将多个条件组合起来,用逻辑运算符&,|,~连接
1.3随机抽样
一般分为有放回抽样和无放回抽样
一般可以用sample函数
n:按个数抽样
frac:按百分比抽样
replace:False无放回抽样,True有放回抽样,默认为False
#对数据按个数抽样
data1=data.sample(3)
#对数据按百分比抽样
data2=data.sample(frac=0.3)
2.数据合并
数据合并是指把表中不同数据合并变成一个新的表
2.1记录合并
我们在数据抽取中会得到很多新的数据,再将它们合并起来就需要记录合并。
使用concat函数,将要合并的数据框以列表形式传入,就可以得到新的表。
import pandas as pd
#导入数据
data=pd.read_csv('D:/数据处理.csv',encoding='GBK')
#对数据按个数抽样
data1=data.sample(3)
#对数据按百分比抽样
data2=data.sample(frac=0.3)
#对dat1,data2合并成newdata
newdata=pd.concat([data1,data2])
2.2字段匹配
也可以叫做横向合并,可以将两个数据框连接起来。
一般用merge函数,它有五个参数
left:左边的数据框
right:右边的数据框
left_on:连接中使用的左数据框的列名
right_on:连接中使用的右数据框的列名
how:默认为inner(内连接)还有left(左连接),right(右连接),outer(外连接)
3.数据计算
用现有的数据做一些运算得到新的数据
3.1简单计算
可以参考第二天中DataFrame运算的使用,这里处理起来是差不多的。
3.2时间计算
通常导入datetime模块来计算相应数据
import pandas as pd
from datetime import datetime
#导入数据
time=pd.read_csv('D:/时间处理.csv',encoding='GBK')
time['时间']=pd.to_datetime(time.注册时间,format='%Y/%m/%d %H:%M:%S')
time['注册天数']=(datetime.now()-time['时间']).dt.days
3.3数据标准化
将数据按比例缩放,最常用的就是0-1标准化
使用round函数,round(number,ndigits)
number是需要处理的数据,ndigits是要保留的小数位数
#对注册天数进行0-1标准化
time['注册天数标准化']=round(
(time.注册天数-time.注册天数.min()
)/(time.注册天数.max()-time.注册天数.min()),2)
3.4数据分组
将数据进行等距或非等距的分组,也叫做数据离散化
使用cut函数对数据分组
cut(x,bins,right,labels)
x:需要分组的列
bins:自定义的分组的列表
right:分组区间右边是否封闭,默认封闭
labels:分组的自定义标签,可以不定义
#对注册时间进行分组
bins=[80,130,180,230]
time['注册时间分组']=pd.cut(time.注册天数,bins)
总结
到这里,数据处理部分就结束了,熟悉了基本的处理接下来就可以到最好玩的数据分析环节。然后我还有个小的爬虫项目,等过几天写完也可以分享出来,现在打球去啦。