写点什么

python 数据分析 -pandas 基础(4)- 数据映射 apply

作者:AIWeker
  • 2022-11-26
    福建
  • 本文字数:876 字

    阅读完需:约 3 分钟

python数据分析-pandas基础(4)-数据映射apply

pandas 数据映射 apply

今天我们分享一个非常常用且重要的 pandas 数据映射函数 apply


我们在数据分析过程中,通常需要对原始的数据进行很多转换和处理,比如对于出生日期,我们希望获得年龄的特征;对于身高和体重的数据,我们希望或者 BMI 指数等等。


这种操作在分析过程是最常用的数据处理,这个过程涉及对一列或者多列数据进行操作。pandas 中用 apply 函数来处理这个过程。


apply 函数的作用:就是用某个指定的函数 f 来依次作用于 DataFrame 或者 Series 的每个数据,可以指定按行处理和按列处理。


我们看一个例子:


import pandas as pdimport numpy as npdata_df = pd.DataFrame({'name': ['jack', 'lili', 'abc'],                      'birthday': ['2001-01-01', '2003-12-01', '2005-09-01'],                      'height':[1.2, 1.5, 1.6],                      'weight': [40, 50, 30]})
复制代码



data_df['age'] = data_df['birthday'].apply(lambda x: (datetime.now().timestamp()-datetime.strptime(x, '%Y-%m-%d').timestamp())//86400/365)
data_df['age'] = data_df['age'].astype(int)
复制代码


如果是计算逻辑比价简单的,处理逻辑可以通过 lambda 函数进行处理;比如上面的例子中通过出生日期计算年龄。默认情况下 apply 传入函数的参数为 series(按列),映射函数对每一列的每一行数据执行函数操作。


也可以定义一个函数来代替 lambda,如下 cal_age 代替:



def cal_age(x): age_ts = datetime.now().timestamp() - datetime.strptime(x, '%Y-%m-%d').timestamp() return age_ts // 86400 / 365
data_df['age'] = data_df['birthday'].apply(cal_age).astype(int)
复制代码


如果数据处理需要多个数据,比如计算 BMI 指数需要升高和体重。



def bmi(x): return x['weight'] / x['height'] ** 2
data_df['bmi'] = data_df[['height', 'weight']].apply(bmi, axis=1)
复制代码


从上可知,计算多列数据时,apply 传入映射函数的参数为 Series,通过 axis 指定按行还是按列,axis=1 为按行,即每一行的多个列的值传入映射行数。以 bmi 例子,传入的是每个人的身高和体重参数。


apply 函数就分享到这,希望对你有帮助。

发布于: 刚刚阅读数: 6
用户头像

AIWeker

关注

InfoQ签约作者 / 公众号:人工智能微客 2019-11-21 加入

人工智能微客(aiweker)长期跟踪和分享人工智能前沿技术、应用、领域知识,不定期的发布相关产品和应用,欢迎关注和转发

评论

发布
暂无评论
python数据分析-pandas基础(4)-数据映射apply_Python_AIWeker_InfoQ写作社区