利用python进行数据预处理,不能离开pandas,我看过的教程在介绍数据预处理时的流程都是:numpy介绍、pandas介绍、数据预处理。

对于numpy和pandas,我的经验是不用刻意去记,知道他们分别是干嘛的(别人问到不至于说不出来),使用方法要有个印象,然后实际运用中有需要再去查就可以。

numpy:科学计算

pandas:基于numpy,非常适合于数据预处理。本案例的数据预处理思路:【重点】重复值、异常值、缺失值;【细节】格式清洗、数据提炼(在该案例中没有进一步数据提炼)。

1. 导入数据,并查看数据的基本情况:

import pandas as pd

data = pd.read_csv('./qunar_freetrip.csv', index_col=0)

print(data.shape) # 几行几列

print(data.info()) # 数据框信息

print(data.describe()) # 数据描述性统计,只统计数值型的变量

print(data.columns) # 返回数据框列名称数据框,输出的详细信息截图省略

从这一步的结果来看,可以初步判定:数据存在缺失值(总数据共5100条,但是出发地、目的地、价格、节省四个变量下数据量都小于5100)。

数据可能存在异常值(描述性统计中,价格最大值达到179500,不符合实际情况,需要后续标准分判断是否属于异常值)。

数据可能存在重复。

数据的列名有些存在空格,有些没有空格,需要对列名进行格式化,方便后续调用。

2.【细节】预处理:数据框列名格式化

DataFrame.columns = [x.strip() for x in DataFrame.columns]

可将列名前后的空格去除。

3.【重点】数据去重DataFrame.duplicated() 返回每一行的True or False,实际上对去重没有什么帮助。

数据去重暂时只需要记住两个有用的

DataFrame.duplicated().sum() # 看一下重复值有多少

DataFrame.drop_duplicates() # 直接去重

去重后,100条重复数据被删除,剩余5000条。【NOTE】数据去重后,原来的索引会出现间断!所以需要进行索引重构!

DateFrame.index = range(data.shape[0]) # 重新生成0-4999的索引号

4.【重点】异常值处理异常值的处理需要考虑具体的业务环境,不同业务环境对异常值的定义不同

在该案例中,重点关注的是“价格”和“节省”两个数值型变量下的异常值

在该案例中,将“价格”列做标准分,标准分绝对值大于3的视为异常值,同时“节省”列的值大于“价格”列的值也视作异常

将满足异常判定条件的数据进行删除

# 在数据框中寻找满足上述条件的数据

std_score = (DataFrame['col_name']-DataFrame['col_name'].mean())/DataFrame['col_name'].std()

DataFrame[std_score.abs() > 3] # 第一个条件

DataFrame[data['节省'] > data['价格']] # 第二个条件

pd.concat([DataFrame[std_score.abs() > 3], DataFrame[data['节省'] > data['价格']]]) # 合并两个条件

# 获取异常数据的index

del_index = pd.concat([DataFrame[std_score.abs() > 3], DataFrame[data['节省'] > data['价格']]]).index

# 删除

DataFrame.drop(del_index, inplace=True)存在异常的数据(4条)删除后剩余4996条数据

5.【重点】缺失值的处理对于缺失值具体情况的查看,掌握两个代码模板即可

DataFrame.isnull().sum() # 查看数据框总体缺失情况

DataFrame[DataFrame['col_name'].isnull()] # 某列缺失值的具体情况“价格”列存在缺失的数据框(部分)该案例中,对于“价格”和“节省”列的缺失值,却用平均值补全

缺失值补全掌握一个代码模板即可

DataFrame['col_name'].fillna(round(DataFrame['col_name'].mean()), inplace=True)该案例中,对于“出发地”和“目的地”列的缺失值,可以用数据提炼的方法在其他列寻找缺失项(路线名字符串中包含出发地和目的地)

# 使用loc相对位置找到缺失值的具体位置

DataFrame.loc[DataFrame['出发地'].isnull(), '出发地']

# "路线名"列数据提炼

[str(x)[:2] for x in DataFrame.loc[DataFrame['出发地'].isnull(), '路线名']]

# 合起来就是:

DataFrame.loc[DataFrame['出发地'].isnull(), '出发地'] = [str(x)[:2] for x in DataFrame.loc[DataFrame['出发地'].isnull(), '路线名']]

# 对于“目的地”缺失值的补全同上,不赘述。最后在对缺失值进行统计,发现已经不存在缺失情况

6.【细节】数据提炼对于数据框中剩余的列,还可能包含着对分析有用的信息,比如“酒店列”包含着酒店评分等。

对于这些数据,可以使用正则表达式进行信息提炼,将提炼后的信息生成新的变量列加入数据框。

···2020.2.11更新补充···在实际业务中,原始数据的缺失值可能会被标记为0或999之类的数值,导入pandas进行数据预处理时,可以使用DataFrame.replace("自定义缺失值", np.nan)替换为pandas可识别的缺失值类型。

对于缺失值的处理,最好是不要直接删除含缺失值的数据,而是要尽可能保留数据信息。若要删除缺失值,使用DataFrame.dropna()

学习要有输入更要有输出。

该文章作为自己的学习输出,可能有些地方是按照自己能看懂的方式写的,模糊的地方还请见谅。

欢迎交流和指教!

python预处理后变量情况描述_【数据预处理】python旅游网站数据清洗实践相关推荐

  1. python股票数据预处理_Python股票处理之六_数据预处理A

    1. 说明 在数据统计和预测的过程中,工程师基本都使用现成的算法,工程师的主要工作是根据具体业务逻辑预处理数据和选择算法. 首先要对数据预处理(数据清洗),包括数据的归一化,去除重复数据,修改错误数据 ...

  2. Python安装后目录在哪儿_如何查看Python的安装目录

    一.Python的安装录 当前安装版本为:python 3.10.4 1.在安装python的时候可以看到安装目录,可以修改安装目录: 2.windows系统下64位安装目录如下: 跟其他软件不太一样 ...

  3. python定义私有变量的方法_浅谈Python中的私有变量

    私有变量表示方法 在变量前加上两个下划线的是私有变量.class Teacher(): def __init__(self,name,level): self.__name=name self.__l ...

  4. 基于python的九轴惯性传感器的数据预处理代码-中值滤波实验

    ** 基于python的九轴惯性传感器的数据预处理代码-中值滤波实验 ** import random import numpy as np import pandas as pd import sc ...

  5. 学习python数据分析的30个练手数据+4个数据集网站

    前几天发了一个博文:懂点excel作图, 怎么让pyechart作的图更具"职场范"呢?丨pyechart工作作图模板, 一不小心上了热榜, 感谢小伙伴们的支持, 以后会多总结发更 ...

  6. python 离群值_数据预处理初学者宝典:360° 掌握离群值识别

    全文共6023字,预计学习时长20分钟或更长 来源:Pexels 离群值监测和处理是数据预处理中最重要的环节之一.机器学习算法注重数据点的范围和分布,而数据离群值掩盖训练进程,导致训练时间加长.模型准 ...

  7. python 处理行列数据集数据_数据预处理(python)

    作为统计的一员,用python来对数据做语出这一步骤是必需的,所以接下来就来总结一下python数据预处理的步骤吧,这里就不放数据了,直接上代码,代码后都有解释,有错误的尽管提出来哈.下面是流程图: ...

  8. python预处理缺失值_数据预处理 第3篇:数据预处理(使用插补法处理缺失值)...

    插补法可以在一定程度上减少偏差,常用的插补法是热卡插补.拟合插补和多重插补.拟合插补,要求变量间存在强的相关性:多重插补(MCMC法),是在高缺失率下的首选插补方法,优点是考虑了缺失值的不确定性. 一 ...

  9. Python股票处理之六_数据预处理A

    1.        说明 在数据统计和预测的过程中,工程师基本都使用现成的算法,工程师的主要工作是根据具体业务逻辑预处理数据和选择算法. 首先要对数据预处理(数据清洗),包括数据的归一化,去除重复数据 ...

最新文章

  1. PyCharm 配置远程python解释器和在本地修改服务器代码
  2. php cookie使用实例h5,html5实现数据存储实例代码
  3. 2021年春季学期-信号与系统-第三次作业参考答案-第一道题
  4. 嵌入式EasyHMI V0.1版终于推出,C#真是软件开发的利器
  5. android 电容屏(二):驱动调试之基本概念篇
  6. 抛出异常–缓慢而丑陋
  7. sqlite 事务处理 java_SQLite事务处理
  8. 数据库开启了闪回和归档,关闭归档日志alter database noarchivelog的时候报错:ORA-38781: cannot disable media recovery
  9. vue学习-处理边界-依赖注入
  10. python编写扫描工具_python编写类似nmap的扫描工具
  11. Swift - 使用导航条和导航条控制器来进行页面切换并传递数据
  12. 下载Chrome浏览器历史版本方法
  13. 金融壹账通拟7月4日香港上市:2年亏近30亿 市值蒸发超90%
  14. OPA(运放)与MOS管组成的恒流源电路
  15. golang中channel的传递
  16. 接口测试二(App抓包)
  17. as ssd测试软件得分少,教大家AS SSD Benchmark如何测试硬盘性能
  18. html文件是一种使用超文本标记语言,超文本标记语言HTML HTML(Hyper Text Markup Language,.ppt...
  19. 自定义 behavior - 完美仿 QQ 浏览器首页,美团商家详情页
  20. mysql 突然报错 1878 Temporary file write failure

热门文章

  1. 模板模式(Template Pattern)
  2. C++20协程原理和应用
  3. 碰上这种 Wi-Fi,iPhone 秒崩!
  4. 从头开发一个 RPC 是种怎样的体验?
  5. OpenHarmony 1.1.0 LTS 版本发布,十六大性能全面提升
  6. C语言指针-从底层原理到花式技巧,图文和代码给你讲解透彻
  7. HarmonyOS 生态最重的拼图,手机开发者 Beta 版终于到来
  8. 电磁感应理论之父,法拉第传奇
  9. 如何利用 Google 开源的 TFCO 构建机器学习模型?
  10. 机器智能芯片 10 大新秀!华为抢占一席,Google 占比最多!