pandas Dataframe的apply方法
凯旋.Lau 人气:1apply方法介绍
方法形式为 apply(func, axis=0, raw=False, result_type=None, agrs=(), **kwargs)
,沿Dataframe的轴应用func函数。
传递给函数的对象是Series对象,当axis=0时,其索引是Dataframe的索引;当axis=1时,其索引是Dataframe的列。
默认情况下,result_type=None,最终返回的类型是从func函数的返回推断出来的,否则它就取决于result_type参数。
参数解析:
- func:函数,要应用于每一列或每一行的函数。
- axis:默认为0,0对应行索引,将func函数应用于每一列;1对应列,将函数应用于每一行。
- raw:布尔值,默认为False,确定行或列是否作为Series或ndarray对象传递。
- False:将每一行或每一列作为一个Series对象传递给函数;
- True:函数将接收ndarray对象。
- result_type:可选值有expand,reduce,broadcast,None,默认为None。
- 默认为None时,返回结果取决于func函数的返回值,类似列表的结果将返回这些结果组成的Series,如果返回Series,则会将Series扩展为列。
- expand:在axis=1时其作用,类似列表的结果将变成列。
- reduce:在axis=1时其作用,如果可以,返回一个Series,而不是扩展类似列表的结果。
- broadcast:在axis=1时其作用,结果将被广播到Dataframe的原始形状,原始行索引和列将会被保留。
- args:元组,除了数组和Series之外,要传递给func的位置参数。
- **kwargs:传递给func的附加关键字参数。
返回:
- func函数沿Dataframe的给定轴应用的结果。
用例1
导入包
import pandas as pd import numpy as np
df = pd.DataFrame([[4, 9]]*3, columns=['A', 'B']) df
输出:
使用numpy中的通用函数。
df.apply(np.sqrt) # 相当于np.sqrt(df)
输出:
用例2
在任一轴上应用函数, 返回由类似列表的结果组成的Series。
df.apply(np.sum, axis=0)
输出:
A 12
B 27
dtype: int64
df.apply(np.sum, axis=1)
输出:
0 13
1 13
2 13
dtype: int64
df.apply(lambda x :[1, 2], axis=1)
输出:
0 [1, 2]
1 [1, 2]
2 [1, 2]
dtype: object
用例3
传递result_type=expand,会将类似列表的结果扩展到Dataframe的列。
df.apply(lambda x : [1, 2], axis=1, result_type='expand')
输出:
在func函数内部返回一个Series,和传递result_type=expand相似,Series的索引将作为扩展的列名。
df.apply(lambda x: pd.Series([1, 2], index=['foo', 'bar']), axis=1)
输出:
传递result_type=broadcast,将会返回相同形状的结果,无论是列表还是标量,将沿轴进行广播,列的名称还是原始名称。
df.apply(lambda x: [1, 2], axis=1, result_type='broadcast')
输出:
总结
加载全部内容