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

上述数据中 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详解的详细内容,更多关于pandas pipe数据预处理优化的资料请关注我们其它相关文章!

(0)

相关推荐

  • python编程学习使用管道Pipe编写优化代码

    目录 什么是管道? Where:可迭代对象中的过滤元素 Select: 将函数应用于可迭代对象 展开可迭代对象 1.chain方法 2.traverse:递归展开可迭代对象 将列表中的元素分组 结论 我们知道 map 和 filter 是两种有效的 Python 方法来处理可迭代对象. 但是,如果你同时使用 map 和 filter,代码可能看起来很混乱. 如果你可以使用管道那不是更好了?像下面这样的方式来处理. Pipe 库可以做到这一点. 什么是管道? Pipe 是一个 Python 库,可

  • 推荐一款高效的python数据框处理工具Sidetable

    目录 安装 用法 1.freq() 2.Counts 3.missing() 4.subtotal() 结论 我们知道 Pandas 是数据科学社区中流行的 Python 包,它包含许多函数和方法来分析数据.尽管它的功能对于数据分析来说足够有效,但定制的库可以为 Pandas 增加更多的价值. Sidetable 就是一个开源 Python 库,它是一种可用于数据分析和探索的工具,作为 value_counts 和 crosstab 的功能组合使用的.在本文中,我们将更多地讨论和探索其功能.欢迎

  • python数据可视化JupyterLab实用扩展程序Mito

    目录 遇见 Mito 如何启动 Mito 数据透视表 Mito 令人印象深刻的功能 可视化数据 自动代码生成 Mito 安装 JupyterLab 是 Jupyter 主打的最新数据科学生产工具,某种意义上,它的出现是为了取代Jupyter Notebook. 它作为一种基于 web 的集成开发环境,你可以使用它编写notebook.操作终端.编辑markdown文本.打开交互模式.查看csv文件及图片等功能. JupyterLab 最棒的体验就是有丰富的扩展插件,我记得过去我们不得不依赖 nu

  • python数据处理67个pandas函数总结看完就用

    目录 导⼊数据 导出数据 查看数据 数据选取 数据处理 数据分组.排序.透视 数据合并 不管是业务数据分析 ,还是数据建模.数据处理都是及其重要的一个步骤,它对于最终的结果来说,至关重要. 今天,就为大家总结一下 "Pandas数据处理" 几个方面重要的知识,拿来即用,随查随查. 导⼊数据 导出数据 查看数据 数据选取 数据处理 数据分组和排序 数据合并 # 在使用之前,需要导入pandas库 import pandas as pd 导⼊数据 这里我为大家总结7个常见用法. pd.Da

  • python数据可视化使用pyfinance分析证券收益示例详解

    目录 pyfinance简介 pyfinance包含六个模块 returns模块应用实例 收益率计算 CAPM模型相关指标 风险指标 基准比较指标 风险调整收益指标 综合业绩评价指标分析实例 结语 pyfinance简介 在查找如何使用Python实现滚动回归时,发现一个很有用的量化金融包--pyfinance.顾名思义,pyfinance是为投资管理和证券收益分析而构建的Python分析包,主要是对面向定量金融的现有包进行补充,如pyfolio和pandas等. pyfinance包含六个模块

  • 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":

  • 基于Python对数据shape的常见操作详解

    这一阵在用python做DRL建模的时候,尤其是在配合使用tensorflow的时候,加上tensorflow是先搭框架再跑数据,所以调试起来很不方便,经常遇到输入数据或者中间数据shape的类型不统一,导致一些op老是报错.而且由于水平菜,所以一些常用的数据shape转换操作也经常百度了还是忘,所以想再整理一下. 一.数据的基本属性 求一组数据的长度 a = [1,2,3,4,5,6,7,8,9,10,11,12] print(len(a)) print(np.size(a)) 求一组数据的s

  • Python中的特殊方法以及应用详解

    前言 Python 中的特殊方法主要是为了被解释器调用的,因此应该尽量使用 len(my_object) 而不是 my_object.__len__() 这种写法.在执行 len(my_object) 时,Python 解释器会自行调用 my_object 中实现的 __len__ 方法. 除非有大量的元编程存在,直接调用特殊方法的频率应远小于实现它们的次数. 模拟数值类型 可以通过在自定义对象中实现 __add__ 和 __mul__ 等特殊方法 ,令其支持 +.* 等运算符. 如下面的模拟向

  • Python设计模式之工厂方法模式实例详解

    本文实例讲述了Python设计模式之工厂方法模式.分享给大家供大家参考,具体如下: 工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延时到其子类. #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'Andy' """ 大话设计模式 设计模式--工厂方法模式 工厂方法模式(Factory Method Pattern):

  • ubuntu中python调用C/C++方法之动态链接库详解

    安装boost python调用C/C++的方法有很多,本文使用boost.python.考虑到后期有好多在boost上的开发工作,所以boost一并安装了,Boost库分为两个部分来使用,一是直接使用对应的头文件,二是需要编译安装相应的库才可以使用. 具体安装方法可以参考:https://www.jb51.net/article/150380.htm 这里使用: sudo apt-get install libboost-all-dev 服务端 序列化后发送 main.cpp: #includ

  • python super的使用方法及实例详解

    功能 super功能:super函数是子类用于调用父类(超类)的一个方法. 用法 1.在子类 __init__() 方法中正确的初始化父类,保证相同的基类只初始化一次. 2.覆盖特殊方法. 3.解决多重继承中,子类重复调用父类方法的问题. 注意 super()继承只能用于新式类,用于经典类时就会报错. 新式类:必须有继承的类,如果无继承的,则继承object 经典类:没有父类,如果此时调用super就会出现错误:『super() argument 1 must be type, not clas

  • Python数据可视化之Pyecharts使用详解

    目录 1. 安装Pyecharts 2. 图表基础 2.1 主题风格 2.2 图表标题 2.3 图例 2.4 提示框 2.5 视觉映射 2.6 工具箱 2.7 区域缩放 3. 柱状图 Bar模块 4. 折线图/面积图 Line模块 4.1 折线图 4.2 面积图 5.饼形图 5.1 饼形图 5.2 南丁格尔玫瑰图 6. 箱线图 Boxplot模块 7. 涟漪特效散点图 EffectScatter模块 8. 词云图 WordCloud模块 9. 热力图 HeatMap模块 10. 水球图 Liqu

  • Python实战实现爬取天气数据并完成可视化分析详解

    1.实现需求: 从网上(随便一个网址,我爬的网址会在评论区告诉大家,dddd)获取某一年的历史天气信息,包括每天最高气温.最低气温.天气状况.风向等,完成以下功能: (1)将获取的数据信息存储到csv格式的文件中,文件命名为”城市名称.csv”,其中每行数据格式为“日期,最高温,最低温,天气,风向”: (2)在数据中增加“平均温度”一列,其中:平均温度=(最高温+最低温)/2,在同一张图中绘制两个城市一年平均气温走势折线图: (3)统计两个城市各类天气的天数,并绘制条形图进行对比,假设适合旅游的

  • python魔法方法-自定义序列详解

    自定义序列的相关魔法方法允许我们自己创建的类拥有序列的特性,让其使用起来就像 python 的内置序列(dict,tuple,list,string等). 如果要实现这个功能,就要遵循 python 的相关的协议.所谓的协议就是一些约定内容.例如,如果要将一个类要实现迭代,就必须实现两个魔法方法:__iter__.next(python3.x中为__new__).__iter__应该返回一个对象,这个对象必须实现 next 方法,通常返回的是 self 本身.而 next 方法必须在每次调用的时

  • 对python requests的content和text方法的区别详解

    问题: 一直在想requests的content和text属性的区别,从print 结果来看是没有任何区别的 看下源码: @property def text(self): """Content of the response, in unicode. If Response.encoding is None, encoding will be guessed using ``chardet``. The encoding of the response content is

随机推荐