关于数据分析:Python数据分析-Pandas数据变换高级函数

作者:韩信子@ShowMeAI
教程地址:http://www.showmeai.tech/tutorials/33
本文地址:http://www.showmeai.tech/article-detail/147
申明:版权所有,转载请分割平台与作者并注明出处


当咱们提到python数据分析的时候,大部分状况下都会应用Pandas进行操作。pandas整个系列笼罩以下内容:

  • 图解Pandas外围操作函数大全
  • 图解Pandas数据变换高级函数
  • Pandas数据分组与操作

本篇为『图解Pandas数据变换高级函数』。

一、Pandas的数据变换高级函数


在数据处理过程中,常常须要对DataFrame进行逐行、逐列和逐元素的操作(例如,机器学习中的特色工程阶段)。Pandas中有十分高效繁难的内置函数能够实现,最外围的3个函数是map、apply和applymap。上面咱们以图解的形式介绍这3个办法的利用办法。

首先,通过numpy模仿生成一组数据。数据集如下所示,各列别离代表身高(height)、体重(weight)、是否吸烟(smoker)、性别(gender)、年龄(age)和肤色(color)。

import numpy as np
import pandas as pd

boolean=[True,False]
gender=["男","女"]
color=["white","black","yellow"]
data=pd.DataFrame({
    "height":np.random.randint(150,190,100),
    "weight":np.random.randint(40,90,100),
    "smoker":[boolean[x] for x in np.random.randint(0,2,100)],
    "gender":[gender[x] for x in np.random.randint(0,2,100)],
    "age":np.random.randint(15,90,100),
    "color":[color[x] for x in np.random.randint(0,len(color),100) ]
}
)

二、Series数据处理

2.1 map办法

当咱们须要把series数据逐元素做同一个变换操作时,咱们不会应用for循环(效率很低),咱们会应用Series.map()来实现,通过简略的一行代码即可实现变换处理。例如,咱们把数据集中gender列的男替换为1,女替换为0。

上面咱们通过图解的形式,拆解map的操作过程:

(1)应用字典映射的map原理

#①应用字典进行映射
data["gender"] = data["gender"].map({"男":1, "女":0})

(2)应用函数映射的map原理

#②应用函数
def gender_map(x):
    gender = 1 if x == "男" else 0
    return gender
#留神这里传入的是函数名,不带括号
data["gender"] = data["gender"].map(gender_map)

如下面例子所示,应用map时,咱们能够通过字典或者函数进行映射解决。对于这两种形式,map都是把对应的数据一一当作参数传入到字典或函数中,进行映射失去后果。

2.2 apply办法

当咱们须要实现简单的数据映射操作解决时,咱们会应用到Series对象的apply办法,它和map办法相似,但可能传入性能更为简单的函数。

咱们通过一个例子来了解一下。例如,咱们要对年龄age列进行调整(加上或减去一个值),这个加上或减去的值咱们心愿通过传入。此时,多了1个参数bias,用map办法是操作不了的(传入map的函数只能接管一个参数),apply办法则能够解决这个问题。

def apply_age(x,bias):
    return x+bias

#以元组的形式传入额定的参数
data["age"] = data["age"].apply(apply_age,args=(-3,))

能够看到age列都减了3,这是个非常简单的例子,apply在简单场景下有着更灵便的作用。
总结一下,对于Series而言,map能够实现大部分数据的对立映射解决,而apply办法适宜对数据做简单灵便的函数映射操作。

三、DataFrame数据处理

3.1 apply办法

DataFrame借助apply办法,能够接管各种各样的函数(Python内置的或自定义的)对数据进行解决,非常灵活便捷。
把握DataFrame的apply办法须要先理解一下axis的概念,在DataFrame对象的大多数办法中,都会有axis这个参数,它管制了你指定的操作是沿着0轴还是1轴进行。axis=0代表操作对列columns进行,axis=1代表操作对行row进行,如下图所示。

咱们来通过例子了解一下这个办法的应用。例如,咱们对data中的数值列别离进行取对数和求和的操作。这时应用apply进行相应的操作,两行代码能够很轻松地解决。

(1)按列求和的实现过程

因为是对列进行操作,所以须要指定axis=0。本次实现的底层,apply到底做了什么呢?咱们来通过图解的形式了解一下:

# 沿着0轴求和
data[["height","weight","age"]].apply(np.sum, axis=0)

(2)按列取对数的实现过程

因为是对列进行操作,所以须要指定axis=0。本次实现的底层,apply到底做了什么呢?咱们来通过图解的形式了解一下:

# 沿着0轴求和
data[["height","weight","age"]].apply(np.sum, axis=0)

# 沿着0轴取对数
data[["height","weight","age"]].apply(np.log, axis=0)

当沿着轴0(axis=0)进行操作时,会将各列(columns)默认以Series的模式作为参数,传入到你指定的操作函数中,操作后合并并返回相应的后果。

(3)按行计算BMI指数

那咱们理论利用过程中有没有(axis=1)的状况呢?例如,咱们要依据数据集中的身高和体重计算每个人的BMI指数(体检时罕用的指标,掂量人体瘦削水平和是否衰弱的重要规范),计算公式是:体重指数BMI=体重/身高的平方(国内单位kg/㎡)。

这个操作须要对每个样本(行)进行计算,咱们应用apply并指定axis=1来实现,代码和图解如下:

def BMI(series):
    weight = series["weight"]
    height = series["height"]/100
    BMI = weight/height**2
    return BMI

data["BMI"] = data.apply(BMI,axis=1)

当apply设置了axis=1对行进行操作时,会默认将每一行数据以Series的模式(Series的索引为列名)传入指定函数,返回相应的后果。

做个总结,DataFrame中利用apply办法:

  1. 当axis=0时,对每列columns执行指定函数;当axis=1时,对每行row执行指定函数。
  2. 无论axis=0还是axis=1,其传入指定函数的默认模式均为Series,能够通过设置raw=True传入numpy数组。
  3. 对每个Series执行后果后,会将后果整合在一起返回(若想有返回值,定义函数时须要return相应的值)
  4. 当然,DataFrame的apply和Series的apply一样,也能接管更简单的函数,如传入参数等,实现原理是一样的,具体用法详见官网文档。

3.2 applymap办法

applymap是另一个DataFrame中可能会用到的办法,它会对DataFrame中的每个单元格执行指定函数的操作,如下例所示:

df = pd.DataFrame(
    {

        "A":np.random.randn(5),
        "B":np.random.randn(5),
        "C":np.random.randn(5),
        "D":np.random.randn(5),
        "E":np.random.randn(5),
    }
)

咱们心愿对DataFrame中所有的数保留两位小数显示,applymap能够帮忙咱们很快实现,代码和图解如下:

df.applymap(lambda x:"%.2f" % x)

材料与代码下载

本教程系列的代码能够在ShowMeAI对应的github中下载,可本地python环境运行,能迷信上网的宝宝也能够间接借助google colab一键运行与交互操作学习哦!

本系列教程波及的速查表能够在以下地址下载获取

  • Pandas速查表
  • NumPy速查表
  • Matplotlib速查表
  • Seaborn速查表

拓展参考资料

  • Pandas官网教程
  • Pandas中文教程

ShowMeAI相干文章举荐

  • 数据分析介绍
  • 数据分析思维
  • 数据分析的数学根底
  • 业务认知与数据初探
  • 数据荡涤与预处理
  • 业务剖析与数据挖掘
  • 数据分析工具地图
  • 统计与数据科学计算工具库Numpy介绍
  • Numpy与1维数组操作
  • Numpy与2维数组操作
  • Numpy与高维数组操作
  • 数据分析工具库Pandas介绍
  • 图解Pandas外围操作函数大全
  • 图解Pandas数据变换高级函数
  • Pandas数据分组与操作
  • 数据可视化准则与办法
  • 基于Pandas的数据可视化
  • seaborn工具与数据可视化

ShowMeAI系列教程举荐

  • 图解Python编程:从入门到精通系列教程
  • 图解数据分析:从入门到精通系列教程
  • 图解AI数学根底:从入门到精通系列教程
  • 图解大数据技术:从入门到精通系列教程

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理