详解Pandas的三大利器(map,apply,applymap)

目录
  • 模拟数据
  • 1、map
    • demo
    • 实际数据
  • 2、apply
    • demo
    • apply实现需求
  • 3、applymap
    • DF数据加1
    • 保留2位有效数字

实际工作中,我们在利用 pandas进行数据处理的时候,经常会对数据框中的单行、多行(列也适用)甚至是整个数据进行某种相同方式的处理,比如将数据中的 sex字段将 男替换成1,女替换成0。

在这个时候,很容易想到的是 for循环。用 for循环是一种很简单、直接的方式,但是运行效率很低。本文中介绍了 pandas中的三大利器: map、apply、applymap 来解决上述同样的需求。

  • map
  • apply
  • applymap

模拟数据

通过一个模拟的数据来说明3个函数的使用,在这个例子中学会了如何生成各种模拟数据。数据如下:

import pandas as pd
import numpy as np

boolean = [True, False]
gender = ["男","女"]
color = ["white","black","red"]

# 好好学习如何生成模拟数据:非常棒的例子
# 学会使用random模块中的randint方法

df = pd.DataFrame({"height":np.random.randint(160,190,100),
                     "weight":np.random.randint(60,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(20,60,100),
                     "color":[color[x] for x in np.random.randint(0,len(color),100)]
                    })
df.head()

1、map

demo

map() 会根据提供的函数对指定序列做映射。

第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。

map(function, iterable)

实际数据

将gender中男变成1,女变成0

# 方式1:通过字典映射实现
dic = {"男":1, "女":0}  # 通过字典映射
df1 = df.copy()   # 副本,不破坏原来的数据df
df1["gender"] = df1["gender"].map(dic)
df1

# 方式2:通过函数实现
def map_gender(x):
    gender = 1 if x == "男" else 0
    return gender

df2 = df.copy()
# 将df["gender"]这个S型数据中的每个数值传进去
df2["gender"] = df2["gender"].map(map_gender)
df2

2、apply

apply方法的作用原理和 map方法类似,区别在于 apply能够传入功能更为复杂的函数,可以说 apply是 map的高级版

pandas 的 apply() 函数可以作用于 Series 或者整个 DataFrame,功能也是自动遍历整个 Series 或者 DataFrame, 对每一个元素运行指定的函数。

在 DataFrame对象的大多数方法中,都会有 axis这个参数,它控制了你指定的操作是沿着0轴还是1轴进行。 axis=0代表操作对 列columns进行, axis=1代表操作对 行row进行

demo

上面的数据中将age字段的值都减去3,即加上-3

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

df4 = df.copy()
# df4["age"]当做第一个值传给apply_age函数,args是第二个参数
df4["age"] = df4["age"].apply(apply_age,args=(-3,))

计算BMI指数

# 实现计算BMI指数:体重/身高的平方(kg/m^2)
def BMI(x):
    weight = x["weight"]
    height = x["height"] / 100
    BMI = weight / (height **2)

    return BMI

df5 = df.copy()
df5["BMI"] = df5.apply(BMI,axis=1)  # df5现在就相当于BMI函数中的参数x;axis=1表示在列上操作
df5

DataFrame型数据的 apply操作总结:

  1. 当 axis=0时,对 每列columns执行指定函数;当 axis=1时,对 每行row执行指定函数。
  2. 无论 axis=0还是 axis=1,其传入指定函数的默认形式均为 Series,可以通过设置 raw=True传入 numpy数组。
  3. 对每个Series执行结果后,会将结果整合在一起返回(若想有返回值,定义函数时需要 return相应的值)

apply实现需求

通过apply方法实现上面的性别转换需求。apply方法中传进来的第一个参数一定是函数

3、applymap

DF数据加1

applymap函数用于对DF型数据中的每个元素执行相同的函数操作,比如下面的加1:

保留2位有效数字

到此这篇关于详解Pandas的三大利器(map,apply,applymap)的文章就介绍到这了,更多相关Pandas map apply applymap内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • pandas map(),apply(),applymap()区别解析

    基础 以下操作基于python 3.6 windows 10 环境下 通过 将通过实例来演示三者的区别 toward_dict = {1: '东', 2: '南', 3: '西', 4: '北'} df = pd.DataFrame({'house' : list('AABCEFG'), 'price' : [100, 90, '', 50, 120, 150, 200], 'toward' : ['1','1','2','3','','3','2']}) df map()方法 通过df.(ta

  • 浅谈Pandas中map, applymap and apply的区别

    1.apply() 当想让方程作用在一维的向量上时,可以使用apply来完成,如下所示 In [116]: frame = DataFrame(np.random.randn(4, 3), columns=list('bde'), index=['Utah', 'Ohio', 'Texas', 'Oregon']) In [117]: frame Out[117]: b d e Utah -0.029638 1.081563 1.280300 Ohio 0.647747 0.831136 -1.

  • Pandas对DataFrame单列/多列进行运算(map, apply, transform, agg)

    1.单列运算 在Pandas中,DataFrame的一列就是一个Series, 可以通过map来对一列进行操作: df['col2'] = df['col1'].map(lambda x: x**2) 其中lambda函数中的x代表当前元素.可以使用另外的函数来代替lambda函数,例如: define square(x): return (x ** 2) df['col2'] = df['col1'].map(square) 2.多列运算 apply()会将待处理的对象拆分成多个片段,然后对各

  • pandas使用函数批量处理数据(map、apply、applymap)

    前言 在我们对DataFrame对象进行处理时候,下意识的会想到对DataFrame进行遍历,然后将处理后的值再填入DataFrame中,这样做比较繁琐,且处理大量数据时耗时较长.Pandas内置了一个可以对DataFrame批量进行函数处理的工具:map.apply和applymap. 提示:为方便快捷地解决问题,本文仅介绍函数的主要用法,并非全面介绍 一.pandas.Series.map()是什么? 把Series中的值进行逐一映射,带入进函数.字典或Series中得出的另一个值. Ser

  • 详解Pandas的三大利器(map,apply,applymap)

    目录 模拟数据 1.map demo 实际数据 2.apply demo apply实现需求 3.applymap DF数据加1 保留2位有效数字 实际工作中,我们在利用 pandas进行数据处理的时候,经常会对数据框中的单行.多行(列也适用)甚至是整个数据进行某种相同方式的处理,比如将数据中的 sex字段将 男替换成1,女替换成0. 在这个时候,很容易想到的是 for循环.用 for循环是一种很简单.直接的方式,但是运行效率很低.本文中介绍了 pandas中的三大利器: map.apply.a

  • 详解pandas apply 并行处理的几种方法

    1. pandarallel (pip install ) 对于一个带有Pandas DataFrame df的简单用例和一个应用func的函数,只需用parallel_apply替换经典的apply. from pandarallel import pandarallel # Initialization pandarallel.initialize() # Standard pandas apply df.apply(func) # Parallel apply df.parallel_ap

  • 详解Pandas 处理缺失值指令大全

    前言 运用pandas 库对所得到的数据进行数据清洗,复习一下相关的知识. 1 数据清洗 1.1 处理缺失数据 对于数值型数据,分为缺失值(NAN)和非缺失值,对于缺失值的检测,可以通过Python中pandas库的Series类对象的isnull方法进行检测. import pandas as pd import numpy as np string_data = pd.Series(['Benzema', 'Messi', np.nan, 'Ronaldo']) string_data.is

  • 详解pandas映射与数据转换

    在 pandas 中提供了利用映射关系来实现某些操作的函数,具体如下: replace() 函数:替换元素: map() 函数:新建一列: rename() 函数:替换索引. 一.replace() 用映射替换元素 在数据处理时,经常会遇到需要将数据结构中原来的元素根据实际需求替换成新元素的情况.要想用新元素替换原来元素,就需要定义一组映射关系.在映射关系中,将旧元素作为键,新元素作为值. 例如,创建字典 fruits 用于指明水果标识和水果名称的映射关系. fruits={101:'orang

  • 详解Java中list,set,map的遍历与增强for循环

    详解Java中list,set,map的遍历与增强for循环 Java集合类可分为三大块,分别是从Collection接口延伸出的List.Set和以键值对形式作存储的Map类型集合. 关于增强for循环,需要注意的是,使用增强for循环无法访问数组下标值,对于集合的遍历其内部采用的也是Iterator的相关方法.如果只做简单遍历读取,增强for循环确实减轻不少的代码量. 集合概念: 1.作用:用于存放对象 2.相当于一个容器,里面包含着一组对象,其中的每个对象作为集合的一个元素出现 3.jav

  • 详解C语言 三大循环 四大跳转 和判断语句

    三大循环for while 和 do{ }while; 四大跳转 : 无条件跳转语句 go to; 跳出循环语句 break; 继续跳出循环语句 continue; 返回值语句 return 判断语句 if,if else,if else if else if...else ifelse 组合 if(0 == x) if(0 == y) error(): else{ //program code } else到底与那个if配对 C语言有这样的规定: else 始终与同一括号内最近的未匹配的if语

  • 详解pandas中iloc, loc和ix的区别和联系

    Pandas库十分强大,但是对于切片操作iloc, loc和ix,很多人对此十分迷惑,因此本篇博客利用例子来说明这3者之一的区别和联系,尤其是iloc和loc. 对于ix,由于其操作有些复杂,我在另外一篇博客专门详细介绍ix. 首先,介绍这三种方法的概述: loc gets rows (or columns) with particular labels from the index. loc从索引中获取具有特定标签的行(或列).这里的关键是:标签.标签的理解就是name名字. iloc get

  • 详解pandas绘制矩阵散点图(scatter_matrix)的方法

    使用散点图矩阵图,可以两两发现特征之间的联系 pd.plotting.scatter_matrix(frame, alpha=0.5, c,figsize=None, ax=None, diagonal='hist', marker='.', density_kwds=None,hist_kwds=None, range_padding=0.05, **kwds) 1.frame,pandas dataframe对象 2.alpha, 图像透明度,一般取(0,1] 3.figsize,以英寸为单

  • 详解pandas获取Dataframe元素值的几种方法

    可以通过遍历的方法: pandas按行按列遍历Dataframe的几种方式:https://www.jb51.net/article/172623.htm 选择列 使用类字典属性,返回的是Series类型 data['w'] 遍历Series for index in data['w'] .index: time_dis = data['w'] .get(index) pandas.DataFrame.at 根据行索引和列名,获取一个元素的值 >>> df = pd.DataFrame(

  • 详解pandas.DataFrame.plot() 画图函数

    首先看官网的DataFrame.plot( )函数 DataFrame.plot(x=None, y=None, kind='line', ax=None, subplots=False, sharex=None, sharey=False, layout=None,figsize=None, use_index=True, title=None, grid=None, legend=True, style=None, logx=False, logy=False, loglog=False,

随机推荐