简单介绍

我们通过一些方法获得数据之后,再通过上次讲的数据导入将得到的数据导入到编程环境中,接下来就到我们今天要聊的数据清洗和数据转换部分。

步骤

1.导入数据

见上一篇博客

2.数据清洗

我们得到的数据可能会因为各种原因,导致部分数据存在错误,缺失,重复等问题,这样的数据一般称作“脏数据”,而我们直接得到的数据大多都是“脏数据”,所以我们就需要进行数据清洗这一步。

  • 数据排序
    数据排序是按照一定的顺序将数据排列,以便于我们浏览数据的时候就可以看出一些明显特征,规律,这样有助于我们想到解决问题的方法。另外,排序还有助于我们对数据检查纠错或者重新归类分组。
    pandas中对于数据框类型可以用pandas.DataFrame.sort_values()函数对指定的列进行排序

pandas.DataFrame.sort_values(by,ascending=True,inplace=False)

参数

说明

by

根据某些列进行排序

ascending

是否上升排序,默认为True,False为降序

inplace

直接修改原数据?默认为False,不修改,返回处理后的值

  • 对重复数据的处理
    1.重复数据查找
    在pandas中先使用duplicated()函数查找重复数据,它默认以所有列为条件对所有行遍历,判断是否有重复数据,如果有重复数据它会在对应的行位置上返回True,所以我们只需要把列值为True的数据挑出来就可以了。
#在pandas进行数据处理
import pandas as pd

#导入数据
data=pd.read_csv('D:\\数据处理.csv',encoding='GBK')
print("查看一下data中的数据")
print(data)

#找出行重复数据的位置
dindex=data.duplicated()
print("查找的结果为")
print(dindex)

#提取出重复行的数据
print("重复行的数据内容为:")
print(data[data.duplicated()])

数据清洗转换 java 数据清洗转换增强要求_数据清洗


数据清洗转换 java 数据清洗转换增强要求_数据分析_02


2.删除重复的数据

将重复多余的数据删除掉,保证数据的唯一性,也称为数据去重

在pandas中使用drop_duplicates()函数对重复数据删除

它主要有三个参数:

subset:用哪些列来判断数据是否重复

keep:保留哪一个数据,默认为first,也可以改为last

inplace:在原数据上是否删除,默认为False

#使用drop_duplicates()函数删除重复数据
delete=data.drop_duplicates()
print(delete)

数据清洗转换 java 数据清洗转换增强要求_重复数据_03

  • 对缺失数据处理
    现实中我们难免会遇到数据缺失的情况存在,对于数据缺失我们主要有三种办法来处理:数据补齐,删除对应缺失数据行或列,不处理。下面讲讲前两种
    1.数据补齐
    在pandas中我们可以使用fillna()函数进行缺失数据填充
#我们首先在data中增加一列具有缺失值的数据
data['年龄']=[22,23,25,45,43,33,None,23,24]
#查看现在的data数据
print(data)
#为缺失值添加自己定的值或者该列的平均值
data['年龄']=data.年龄.fillna(data.年龄.mean())
#再查看一次数据
print(data)

数据清洗转换 java 数据清洗转换增强要求_数据清洗转换 java_04


可以看到李六的年龄被赋值成了均值29.75

2.删除缺失值所在的行或者列

在pandas中我们使用dropna()函数

它主要由两个参数,axis和how

axis:axis=0按行删除,axis=1按列删除

how:默认值为any即遇到一个空值就删除一行或一列,也可以改为all,即所有为空才删除

这个比较简单,一般也不需要改参数,直接data.dropna()就好

  • 空格数据的处理
    我们导入的数据有可能会出现上面一行数据和下面一行数据不对齐的情况,这个时候就需要空格处理了。(只处理字符型数据前后的空格,字符串之间的空格不处理)
    使用pandas.Series.str.strip(value=’ ')函数
    value是要除掉的值,默认是空格符

3.数据转换

1.数据类型的转换

如果我们想知道哪一列的数据是什么类型的,我们可以用data.列名.dtype。那如果我们有一列是身份证号的数据,它的数据是数值型,而我们想让它成为字符型,那就需要用到astype()函数了。
它的主要参数只有一个,就是需要转换的数据类型。

#数据类型转换
print(data['id'].dtype)
data['id']=data.性别.astype('object')
print(data['id'].dtype)

数据清洗转换 java 数据清洗转换增强要求_重复数据_05

相反的,如果我们想让字符型的转换成数值型的我们可以也可以用astype()函数

2.字符类型转时间类型

将字符类型的数据转为时间格式,可以用to_datetime()函数
输入的参数为字符型时间格式的列,时间的格式
年月日时分秒分别为%Y,%m,%d,%H,%M,%S(注意大小写

再想想我们需要统计每个月的情况变化时,就需要把时间格式再转换,这时就需要使用dt.strftime()函数,参数只有一个时间的格式,通常是’%Y-%m’

4.总结

今天主要把数据导入后需要做的数据清洗和数据转换聊了一下,更具体的还是要结合实战才能更加形象具体,所以我想等数据分析讲得差不多了就开始慢慢写些实战项目出来让大家能更好的体会一下如何一步步进行数据分析。今天也是因为有点事,晚上将近十二点才开始写,现在好困,有的内容比较简单就没写代码一句带过了,希望体谅。