网络编程
位置:首页>> 网络编程>> Python编程>> python优化数据预处理方法Pandas pipe详解

python优化数据预处理方法Pandas pipe详解

作者:Python学习与数据挖掘  发布时间:2021-12-27 06:34:51 

标签:python,pandas,pipe,数据预处理

我们知道现实中的数据通常是杂乱无章的,需要大量的预处理才能使用。Pandas 是应用最广泛的数据分析和处理库之一,它提供了多种对原始数据进行预处理的方法。


import numpy as np
import pandas as pd
df = pd.DataFrame({
  "id": [100, 100, 101, 102, 103, 104, 105, 106],
  "A": [1, 2, 3, 4, 5, 2, np.nan, 5],
  "B": [45, 56, 48, 47, 62, 112, 54, 49],
  "C": [1.2, 1.4, 1.1, 1.8, np.nan, 1.4, 1.6, 1.5]
})
df

python优化数据预处理方法Pandas pipe详解

上述数据中 NaN 表示的缺失值,id 列包含重复的值,B 列中的 112 似乎是一个异常值。

这些就是现实数据中的一些典型问题。我们将创建一个管道来处理刚才描述的问题。对于每个任务,我们都需要一个函数。因此,首先是创建放置在管道中的函数。需要注意的是,管道中使用的函数需要将数据帧作为参数并返回数据帧。

第一个函数是处理缺少的值


def fill_missing_values(df):
  for col in df.select_dtypes(include= ["int","float"]).columns:
     val = df[col].mean()
     df[col].fillna(val, inplace=True)
  return df

我喜欢用列的平均值替换数字列中缺少的值,当然你也可以根据具体场景来定义。只要它将数据帧作为参数并返回数据帧,它就可以在管道中工作。

第二个函数是帮助我们删除重复的值


def drop_duplicates(df, column_name):
  df = df.drop_duplicates(subset=column_name)
  return df

调用 Pandas 内置的 drop duplicates 函数,它可以消除给定列中的重复值。

最后一个函数是用于消除异常值


def remove_outliers(df, column_list):
  for col in column_list:
     avg = df[col].mean()
     std = df[col].std()
     low = avg - 2 * std
     high = avg + 2 * std
     df = df[df[col].between(low, high, inclusive=True)]
  return df

此函数的作用如下:

  • 需要一个数据帧和一列列表

  • 对于列表中的每一列,它计算平均值和标准偏差

  • 计算标准差,并使用下限平均值

  • 删除下限和上限定义的范围之外的值

与前面的函数一样,你可以选择自己的检测异常值的方法。

创建管道

我们现在有3个函数来进行数据预处理的任务。接下来就是使用这些函数创建管道。


df_processed = (df.pipe(fill_missing_values).pipe(drop_duplicates, "id").pipe(remove_outliers, ["A","B"]))

此管道按给定顺序执行函数。我们可以将参数和函数名一起传递给管道。

这里需要提到的一点是,管道中的一些函数修改了原始数据帧。因此,使用上述管道也将更新df。

解决此问题的一个方法是在管道中使用原始数据帧的副本。如果你不关心保持原始数据帧的原样,那么可以在管道中使用它。

我将更新管道,如下所示:


my_df = df.copy()
df_processed = (my_df.pipe(fill_missing_values).pipe(drop_duplicates, "id").pipe(remove_outliers, ["A","B"]))

让我们看一下原始数据帧和处理后的数据帧:

python优化数据预处理方法Pandas pipe详解

python优化数据预处理方法Pandas pipe详解

结论

当然,你可以通过单独使用这些函数来完成相同的任务。但是,管道函数提供了一种结构化和有组织的方式,可以将多个功能组合到单个操作中。

根据原始数据和任务,预处理可能包括更多步骤。可以根据需要在管道函数中添加任意数量的步骤。随着步骤数量的增加,与单独执行函数相比,管道函数的语法变得更清晰。

来源:https://blog.csdn.net/weixin_38037405/article/details/119301610

0
投稿

猜你喜欢

  • 通配符是一些特殊符号,主要有星号(*)和问号(?),用来模糊搜索文件,“*”可以匹配任意个数个符号, “?”可以匹配单个字符。当查找文件夹时
  • 导读:这篇文章主要介绍如何利用opencv来对图像添加各类噪声,原图:1、高斯噪声高斯噪声就是给图片添加一个服从高斯分布的噪声,可以通过调节
  •  这是我研究网页切片算法的一个汇总想法。之前我写过:一种面向搜索引擎的网页分块、切片的原理,实现和演示,随着工作的深入,逐渐碰到以
  • 这次让我们来看看一个真实场景吧:银行转账一、举例银行转账假设现在有一个xuewei的账号里面有 100W。然后有多个任务在转账,转入转出都是
  • Python读取配置文件-ConfigParser二次封装直接上上代码test.conf[database]connect = mysqls
  • 简介观察者模式是行为型模式的一种,定义了对象间一对多的关系。当对象的状态发生变化时候,依赖于它的对象会得到通知。适用场景类似触发钩子事件,可
  • 分割单词将一个标识符分割成若干单词存进列表,便于后续命名法的转换先引入正则表达式包import re至于如何分割单词看个人喜好,如以常见分隔
  • 想使用正则表达式来获取一段文本中的任意字符,写出如下匹配规则: (.*) 结果运行之后才发现,无法获得换行之后的文本。于是查了一下手册,才发
  • 最近在公司做了微信支付的接入,这里总结下开发的一些经验注意,我使用的是微信开放平台的支付,与手机app相关,而与公众账号无关。微信支付的主要
  • 摘要:本文介绍了有关数据表的优化技巧,主要内容有,选择表的类型,打开尽量少的表,锁定表与查询速度的关系以及如何优化表以达到提高查询速度的目的
  • 非原创:英文版混乱的标记语言XHTML2/HTML5源文地址:漫画英文版源文地址感谢我的同事Kevin Jaw的翻译。他的博客地址是:Kev
  • 八种获取当前日期的js代码,第一步:把如下代码加入<head>区域中:<SCRIPT language=java
  • 目录一、pyecharts绘制饼图语法简介二、绘制普通饼图三、绘制圆环图四、绘制饼图-玫瑰图一、pyecharts绘制饼图语法简介饼图主要用
  • 大部分数据库管理员拥有某种形式的数据库元数据库,他们依赖其来跟踪范围很广的Microsoft SQL Server环境。我利用连接的服务器和
  • 什么是索引 拿汉语字典的目录页(索引)打比方:正如汉语字典中的汉字按页存放一样,SQL Server中的数据记录也是按页存放的,每页容量一般
  • 一、Flask蓝图目录我们之前写的Flask项目都是自己组织的目录结构,其实Flask官方有其推荐的目录结构,以下就是一个符合官方推荐的Fl
  • ul: unordered lists ol: ordered lists li: Listsol 有序列表:<ol>
  •     关于导航栏的设计有很多特效,但你浏览过这样一种导航栏特效吗?当鼠标移到导航栏目上时,导航栏目会被一层“
  • 我要实现的就是下图的这种样式,可参考下面这两个网站的留言板,他们的实现原理都是一样的畅言留言板样式:网易跟帖样式:原理需要在评论表添加两个主
  • Todo清单需要实现的功能有添加任务、删除任务、编辑任务,操作要关联数据库。任务需要绑定用户,部门。用户需要绑定部门。{#自己编写一个基类模
手机版 网络编程 asp之家 www.aspxhome.com