首页 > pandas 阅读数:45

pandas apply()与DataFrame()函数

pandas 提供了大量能使我们快速便捷地处理数据的函数和方法。本节教程主要对 pandas 库中的 apply() 函数和 DataFrame 格式化函数进行介绍。

apply() 函数

apply() 函数是 pandas 所有函数中自由度最高的函数。它分为以下两种情况。

Series.apply()

该函数的功能是在序列的每一个元素上应用自定义函数,函数的格式如下:

Series.apply(func, convert_dtype=True, args=(), **kwds)

函数中的参数说明如下:
  • Series:Series 对象名称;
  • func:要应用到序列上每一个元素的函数;
  • convert_dtype:布尔数据类型,默认为 True,表示寻找到最合适的结果类型;
  • args=():元组数据类型,表示传入 func 函数的参数;
  • **kwds:表示传入 func 函数的参数。

DataFrame.apply()

该函数的功能是在 DataFrame 对象指定的轴方向应用自定义函数,函数的格式如下:

DataFrame.apply(func,axis,broadcast,row,reduce,args=(),**kwds)

函数中的参数说明如下:
  • DataFrame:DataFrame 对象名称;
  • func:要应用在 DataFrame 对象的行或列的函数;
  • axis:用于控制是将 DataFrame 对象的行数据,还是列数据传入 func 函数。如果 axis=1 则将 DataFrame 对象的行数据作为 Series 的数据结构传入 func 函数。它的默认值是 0;
  • broadcast:布尔数据类型,默认为 False。对于聚合函数,返回具有传播值的相同大小的对象;
  • row:布尔数据类型,默认为 False。其作用是将每行或每列转换为一个系列。如果 row=True,则传递的函数将接收 ndarray 对象;
  • reduce:默认为 None,表示尽量减少应用程序;
  • args=():元组数据类型,表示传入 func 函数的参数;
  • **kwds:表示传入 func 函数的参数。

apply() 函数应用

1) 查看序列中元素的类型

其示例代码如下。
In [1]:  import pandas as pd
In [2]:  se =pd.Series(['a',2,True])
In [3]:  se.apply(type) #使用type()函数
Out[3]:  0      <class 'str'>
         1      <class 'int'>
         2     <class 'bool'>
         dtype: object

2) DataFrame 的多列运算

其示例代码如下。
In [4]:  import numpy as np
In [5]:  #创建匿名函数,实现两列数据运算
In [6]:  f = lambda x: x['item1'] + 2 * x['item2']
In [7]:  df = pd.DataFrame(np.arange(6).reshape(3, 2),columns = ['item1', 'item2'])
In [8]:  #应用apply(),并创建运算结果列
In [9]:  df['item3'] = df.apply(f, axis=1)
In [10]:  df
Out[10]:
           tem1i   tem2i   tem3
          0    0       1      2
          1    2       3      8
          2    4       5     14

apply() 函数可以返回一个标量,也可以返回 Series 对象。如果创建一个自定义函数,该自定义函数可返回两个或两个以上的结果,那么,调用 apply() 函数应用该自定义函数时,返回的结果是 DataFrame 对象。

DataFrame 格式化函数

applymap 函数

使用 applymap 函数可以格式化 DataFrame,其示例代码如下。
In [11]:  df = pd.DataFrame(np.arange(6).reshape(3, 2),columns = ['item1', 'item2'])
In [12]:  #将DataFrame中的元素格式化为2位小数
In [13]:  format = lambda x: "%.2f" % x
In [14]:  df.applymap(format)
Out[14]:
            item1   item2
          0  0.00    1.00
          1  2.00    3.00
          2  4.00    5.00

map() 函数

使用 map() 函数可格式化 DataFrame 指定行或列,其示例代码如下。
In [15]:  df = pd.DataFrame(np.arange(6).reshape(3, 2),columns = ['item1', 'item2'])
In [16]:  df['item1'].map(format)
Out[16]:
             item1
          0  0.00
          1  2.00
          2  4.00