python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > python数据处理和清洗

python数据处理和数据清洗的示例详解

作者:阑梦清川

数据清洗是指发现并纠正数据文件中可识别的错误的最后一道程序,包括检查数据一致性,处理无效值和缺失值等,数据清洗与处理的目的是提高数据的质量,提高实验结果的可靠度,本文给大家介绍了python数据处理和数据清洗的示例,需要的朋友可以参考下

1.库的相关简介

python里面是通过模块体现库的,可以降低程序员的使用成本,提高程序的开发效率;

标准库:官方提供的;

第三方库:其他的大佬做出来的(数量庞大);

2.数据处理之添加新列

import pandas as pd
df = pd.read_csv("/Users/feifei/hotpot.csv")
 
# 计算性价比评分,通过赋值,将结果添加为df的"性价比评分"列
df["性价比评分"] = (df["口味评分"]/df["人均消费"])*40
 
# 计算氛围评分,通过赋值,将结果添加为df的"氛围评分"列
df["氛围评分"] = (df["服务评分"]+df["环境评分"])/2
 
# 使用print()输出df
print(df)

什么叫做添加新列,就是我们在数学建模对于数据集合进行处理的时候,对于海量的数据,我们可能会根据这个已知的数据添加新的变量之类的,这个新的变量就是我们通过已知的数据得到的新的数据变量;

在上面这个案例里面,我们通过一个店铺的口味评分和人均消费凝练出来一个性价比评分作为新的数据变量,根据这个店铺的服务评分和环境评分凝练出来这个氛围的评分作为新的数据变量,最后这两个新的变量就会作为新的表头显示在我们原来的数据表格里面去;

3.处理结果的小数位数的处理

我们想要对于这个处理结果的小数的位数进行控制,我们可以使用一个函数:

因为这个里面是进行的多列索引,这个时候我们使用了这个索引的嵌套,round(2)表示对于所选择的数据进行保留两位小数的处理,并且更新原来的数据;

import pandas as pd
df = pd.read_csv("/Users/feifei/hotpot.csv")
 
# 计算性价比评分,通过赋值,将结果添加为df的"性价比评分"列
df["性价比评分"] = (df["口味评分"]/df["人均消费"])*40
 
# 计算氛围评分,通过赋值,将结果添加为df的"氛围评分"列
df["氛围评分"] = (df["服务评分"]+df["环境评分"])/2
 
# TODO 使用round()函数对2个新列保留2位小数
df[["性价比评分","氛围评分"]] = df[["性价比评分","氛围评分"]].round(2)
 
# 使用print()输出df
print(df)

4.对于某一列的数据进行排序

我们上面综合得到了这个性价比评分和氛围评分,我们想要根据这两个指标进行这个店铺的排名

sort_values就是一个函数的调用,by=""表示的是对于某一列的内容进行处理,ascending=False表示的就是以降序的形式进行排序,如果我们没有写这个参数或者是等于true,都是以升序的形式进行排序;

# 使用sort_values()对df的"性价比评分"列进行降序排序,并赋值给df_1
df_1 = df.sort_values(by="性价比评分",ascending=False)
 
# 使用sort_values()对df的"氛围评分"列进行降序排序,并赋值给df_2 
df_2 = df.sort_values(by="氛围评分",ascending=False)
 
# 使用print()输出df_1
print(df_1)
 
# 使用print()输出df_2
print(df_2)

5.选择我们想要的数据集合

我们的排序也完成了,接下来的就是只保留这个店铺的名称和性价比,并且打印显示出来前面的10名店铺作为我们的最佳选择;

head函数就会筛选出来前面的10个店铺打印出来,df_atmospyere这个里面存储的就是我们想要的两列的数据集合;

# TODO 使用sort_values()对df的列"氛围评分"进行降序排序,并赋值给df_2
df_2 = df.sort_values(by="氛围评分",ascending=False)
 
# TODO 使用多列索引的方式,访问df_2的"店铺名称"和"氛围评分"2列,并赋值给df_atmosphere
df_atmosphere = df_2[["店铺名称","氛围评分"]]
 
# TODO 使用print()输出df_atmosphere的前10行
print(df_atmosphere.head(10))

6.脏数据的介绍

6.1背景介绍

脏数据包括异常值,缺失值和重复值,把脏数据筛选出来,进行修正,填补的工作的过程,就是数据的清洗;

我们想要去处理这些脏的数据,就要首先导入这个pandas模块,进行文件的读取,然后进行这个数据集的格式转换,把这个里面的数据类型,单位进行修改;

下面的这个是一个平台的会员开通情况数据集合:

上面的这个就是我们要处理的数据大致情况,因为数据量很大,我们只截取出来这个里面的一小部分数据,简单的说明一下,这个表头的实际含义,分别是订单的编号,用户的id,价格(以分为单位),支付平台,支付渠道,支付方式,交易时间,支付时间;

6.2时间序列转换

# 导入pandas模块,简称为pd
import pandas as pd
 
# 读取路径为"/Users/clean/视频会员订单数据源.csv"的文件,赋值给变量df
df = pd.read_csv("/Users/clean/视频会员订单数据源.csv")
 
# 商品价格price,单位分转化成元
df['price'] = df['price'] /100
 
# 使用to_datetime()函数,将订单创建时间create_time,转化成时间格式
df['create_time'] = pd.to_datetime(df['create_time'])
 
# TODO 使用to_datetime()函数,将订单支付时间pay_time,转化成时间格式
df['pay_time'] = pd.to_datetime(df['pay_time'])
 
# 输出此时的df
print(df)

上面做的工作就是在原来的表格的基础上面进行这个单位的修改,把原来以分为单位的数据转换为以元为单位,把这个订单的两个时间全部转换为时间格式:使用to_datatime函数;

7.数据清洗

7.1快速浏览数据

我们上面已经完成了准备的工作,就是把这个相关的单位进行修正,和我们的这个时间序列的转换

下面我们使用这个info函数快速地浏览全部数据,确定每一列的数据的缺失情况,这个函数相当于print打印功能,显示出来存在的数据个数,通过这个打印结果,我们就可以发现,其他列的数据全部是78049,而这个platform这一列却是77645,这个时候我们就可以知道那些列缺失了多少的数据,因为大部分的数据都是完整的,只需要找出与众不同的数字;

7.2找到缺失值

我们上面已经确定这个数据是存在缺失的情况的,但是我们应该如何找到缺失数据的具体的位置呢

我们可以使用insull函数:找到一列里面每一行的数据是否缺失;

8.分类对于缺失的数据进行处理

数据缺失了怎么办,直接删除还是补全,针对于这个数据的多少和数据的重要程度,我们需要分情况进行处理;

如果是对于我们的研究很重要的数据,我们删除显然是不合适的;

但是如果一个数据集合有几十万的数据,我们删除几百个也是无伤大雅的:drop函数;

如果缺失值的数量较多,并且缺失值所在的这一列(这一个属性),并不是我们分析的重点时,可以对缺失值进行补全:fillna函数;

8.1对于缺失值的删除

我们首先筛选出来这个缺失值所在的行标,存储到dfPayNull这个series里面;

接下来使用drop函数进行数据的删除(删除行),参数就是我们得到的这个dfpaynull的index索引

# 使用布尔索引和isnull函数,将payment_provider这一列的缺失值筛选出,赋值给变量dfPayNull
 
# dfPayNull就是,包含所有payment_provider这一列缺失值的行
dfPayNull = df[df['payment_provider'].isnull()]
 
# TODO 使用drop函数,将dfPayNull,也就是包含所有payment_provider这一列缺失值的行删除
df.drop(index=dfPayNull.index,inplace=True)
 
# 使用df.info(),快速浏览数据集
df.info()

8.2对于缺失值的填充

df['platform']使我们需要填充的列对象,这个对象去调用fillna函数,参数有两个,第一个就是填充的内容,第二个就是缺失的行标;

# TODO 使用fillna()函数,用"unknown"填充platform的缺失值
df['platform'].fillna("unknown",inplace=True)
 
# 输出df.info()
df.info()

9.分析处理异常值

9.1一般处理

首先是一些比较明显的异常值:例如这个id肯定不可能是负数,这个时候对于id<0这个判断条件对于异常值进行删选。但是更多的是下面的情况:

这个时候我们需要使用一个函数进行处理:isin()函数

9.2特殊情况

我们使用这个函数筛选出来不是某些数据的索引,我们使用这个函数,异常数据返回的是false,这个时候我们使用取反运算符,当这个返回false就是我们认定的异常值;

9.3交易时间的筛选

交易时间必须在提交订单时间的后面,这个才是正常的,这个可以作为一个判断条件;

# TODO 使用布尔索引,将支付时间pay_time小于创建时间create_time的异常值筛选出来,赋值给变量dfWrongTime
 
dfWrongTime = df[df['pay_time'] < df['create_time']]
 
# 使用print输出dfWrongTime
 
print(dfWrongTime)

10.分析处理重复值

pandas的duplicated()函数专门对重复值进行处理。

duplicated()函数,判断重复的机制,是会把出现相同值的第二个及以后的数据,判断为True

这样,保证每个数据都保留一个唯一值。

# 使用布尔索引、duplicated函数,将order_id这一列的重复值筛选出来,赋值给变量dfOrderDu
dfOrderDu = df[df['order_id'].duplicated()]

以上就是python数据处理和数据清洗的示例详解的详细内容,更多关于python数据处理和清洗的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文