python提示用户进行输入数据_基于Python的数据分析-4.数据处理(上)

数据清洗

在数据分析时,原始数据中可能会有不完整、不一致、有异常的数据,因此在拿到数据后,首先需要进行数据的清洗。数据清洗的目的是处理缺失数据以及清除无意义的信息。

重复值的处理步骤利用DataFrame中的duplicated方法,来返回一个布尔型的Series,现实是否有重复行,没有重复的行为False。有重复的行,从第二个重复行起显示True

在用drop_duplicates方法将重复行移除,并返回移除后的DataFrame

格式duplicated(self,subset = None,keep = 'first')

subset用于选择需要识别的列标签,默认为所有列标签

keep = 'first' 表示除第一个外,其余重复项被标记

keep = 'last' 表示除最后一个,其余重复性被标记

keep = False 表示所有重复的数据都会被标记

两个方法中,默认判断全部列,如果加入指定列名,如:drop_duplicates(['name']),则指定部分列(name列)进行重复项判断

drop_duplicates删除时是将整行删除

缺失值的处理 一般来说,缺失值的处理包括两个步骤,识别和处理缺失数据的识别在pandas中,使用浮点值 NaN 表示数据里的缺失数据

使用isnull和notnull来判断,isnull中空数据返回True,notnull相反

缺失数据的处理dropna():去除数据中包含空项的行。参数有:how = 'all'表示行中所有数据为空时才丢弃,axis = 1表示丢弃列

fillna():替换缺失值,例df.fillna('?')。参数有:df.fillna(method = 'pad')表示用前一个(同列的)数据代替

df.fillna(method = 'bfill')表示用后一个代替

df.fillna(df.mean())表示使用(同列的)平均数代替

df.fillna(df.mean()['需填补列名':'取均值列名']),用指定列的平均数来替换

df.fillna({'列名1':'值1','列名2':'值2'}),通过字典的形式来对不同的列替换指定值

strip():去除字符串中首位指定的字符,默认删除空格,例:s= ',aaa,' s.strip(',') s='aaa',df['name'].str.strip():对name整列操作指定左边:lstrip(),指定右边:rstlip()

replace():替换字符串中指定的值,例s = 'aaa,aa' s.replace(',','') s='aaaaa'

数据抽取

字段抽取 字段抽取指抽出某列上指定位置的数据做成新的列,命令:

slice(start,stop)

start表示开始位置,stop表示结束位置

例,假设我们有一个表格,其中有一列内容为电话号码提取前三位,用于判断服务商:df['电话'].str.slice(0,3),返回一个前三位的列表

提取中间4位,用于判断地域:df['电话'].str.slice(3,7),返回中间4位的列表

字段拆分 指按照指定的字符,将已有字符串拆分,命令:

split(sep,n,expand = False)

sep是用于分割的分隔符,n表示分割后新增的列数(总共为n+1列)

expand表示是否展开为数据框,默认False

True返回DataFrame,False返回Series

输出为:

索引重置 重置索引是指将某列指定为“索引”,以便对其他数据进行操作,命令:

df.set_index('列名')

通过索引调用

df.ix['元素']

注:根据python3.7的提示:

在这里弃用ix方法

使用ioc调用索引内容,loc[行标签,列标签]

或者使用iloc调用索引号,iloc[行序号,列序号]

例:

输出(以下内容输出两遍):

记录抽取 根据一定条件,对数据进行抽取,格式:

df[condition]

其中:condition表示过滤条件

返回值为DataFrame

常用的condition类型有:比较运算:== , < , > , >= , <= , !=

范围运算:between(left,right)

空置运算:isnull(column)

字符匹配:str.contains(patten,na = False)可以实现模糊搜索,支持正则表达式

na表示返回值中NaN如何表示(这里使用False充填)

逻辑运算:&与,|或,not非

例:

输出:

随机抽样 指随机从数据中按一定的行数或比例抽取数据

numpy.random.randint(start,end,num)

start开始值, end结束值, num抽取个数

输出(展示loc和iloc的区别,输出为两遍同样的内容):

字典数据抽取 指将字典数据抽取出来生成DataFrame字典key和value各作为一列(每个元素作为一行)DataFrame.from_dict(dict,orient = 'index')

其中orient = 'index'参数:可选index和columns,分别表示按行

字典中每个元素作为一列直接将字典赋值给DataFrame即可

分为两种情况

输出:

插入数据

pandas没有原生的插入方法,需要自行设置使用append方法插入末尾(其中ignore_index表示忽略line自己的index值,跟随df的)

使用concat方法重新组合,插入到指定位置(reset_index(drop=True)表示重置新序列的时候,删除旧的序列)

输出:

修改记录

整体替换 整行,整列的替换,很容易做到,例如:df['数学成绩'] = line,其中line是填进去的数据序列(列表或Series)

个别修改 按条件进行替换(类似excel中的“查找替换”),可以通过replace方法

replace('a','b')单值替换:df.replace('作弊',0)将作弊替换为0

指定列单值替换:df.replace({'体育':'缺考','英语':'作弊'},0),用0替换体育列的缺考和英语列的作弊

多值替换:df.replace(['tom','jerry'],['汤姆','杰瑞'])用中文名替换英文名

交换行或列

使用reindex方法

输出:

还有一种方法,参考插入数据中的concat方法

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值