python apply函数的用法_Python pandas.DataFrame.apply函数方法的使用

DataFrame.apply(func, axis=0, broadcast=None, raw=False, reduce=None, result_type=None, args=(), **kwds)

沿着DataFrame的轴应用一个函数。

传递给函数的对象是Series对象,其索引要么是DataFrame的索引(轴=0),要么是DataFrame的列(axis=1)。默认情况下(result_type=None),最终的返回类型是从应用函数的返回类型推断出来的。否则,它取决于result_type参数。

参数:func : function

作用于每一列或行。

axis: {0 或 ‘index’, 1 或 ‘columns’}, 默认 0

函数所应用的轴:

0 或 ‘index’: 对每一列应用函数。

1 或 ‘columns’: 对每一行应用函数。

broadcast : bool, 可选

仅与聚合函数相关:

False 或 None : 返回一个Series,该Series的长度是索引的长度或列的数量(基于axis参数)

True: 结果将广播到框架的原始形状,原始索引和列将保留。

从0.23.0版本开始就不推荐使用:这个参数将在将来的版本中被删除,取而代之的是result_type= ' broadcast '。

raw: bool, 默认 False

False : 将每一行或每一列作为一个Series传递给函数。

True : t传递的函数将接收ndarray对象。如果您只是应用一个NumPy约简函数,这将获得更好的性能。

reduce : bool或 None, 默认 None

试着使用减量程序。如果DataFrame为空,apply将使用reducto确定结果应该是一个Series还是一个DataFrame。如果reduce=None(缺省值),apply的返回值将通过在空序列上调用func来猜测(注意:在猜测时,func引发的异常将被忽略)。如果reduce=True,则始终返回一个Series,如果reduce=False,则始终返回一个DataFrame。

从0.23.0版本开始就不推荐使用:这个参数将在将来的版本中被删除,取而代之的是result_type='reduce'。

result_type : {‘expand’, ‘reduce’, ‘broadcast’, None}, 默认 None

这些只在axis=1(列)时起作用:

‘expand’ : 类似列表的结果将转换为列。

‘reduce’ : 如果可能,返回一个Series,而不是展开类似列表的结果。这是‘expand’的反义词。

‘broadcast’ : 结果将广播到DataFrame的原始形状,保留原始索引和列。

默认行为(None)取决于应用函数的返回值:类似列表的结果将作为这些结果的Series返回。但是,如果apply函数返回一个Series,这些列就会展开为列。

New in version 0.23.0.

args: tuple

除了array/series外,还要传递给func的位置参数。

**kwds

要作为关键字参数传递给func的其他关键字参数。

返回:applied: Series 或 DataFrame

Notes

在当前的实现中,apply在第一列/行上两次调用func,以决定它是采用快速代码路径还是慢代码路径。如果func有副作用,这可能会导致意想不到的行为,因为它们将对第一列/行起两次作用。

例子,>>> df = pd.DataFrame([[4, 9],] * 3, columns=['A', 'B'])

>>> df

A B

0 4 9

1 4 9

2 4 9

使用numpy通用函数(在本例中与np.sqrt(df)相同):>>> df.apply(np.sqrt)

A B

0 2.0 3.0

1 2.0 3.0

2 2.0 3.0

在任意轴上使用还原函数:>>> 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

重放一个类似列表的结果将是Series:>>> df.apply(lambda x: [1, 2], axis=1)

0 [1, 2]

1 [1, 2]

2 [1, 2]

dtype: object

传递result_type= ' expand '将把类似列表的结果扩展到Dataframe的列:>>> df.apply(lambda x: [1, 2], axis=1, result_type='expand')

0 1

0 1 2

1 1 2

2 1 2

在函数中返回一个Series类似于传递result_type='expand'。得到的列名将是Series索引:>>> df.apply(lambda x: pd.Series([1, 2], index=['foo', 'bar']), axis=1)

foo bar

0 1 2

1 1 2

2 1 2

传递result_type='broadcast'将确保函数返回相同的形状结果,无论是列表类型的还是标量类型的,并沿着轴进行广播。得到的列名将是原始列名>>> df.apply(lambda x: [1, 2], axis=1, result_type='broadcast')

A B

0 1 2

1 1 2

2 1 2

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用`.apply(lambda x: )`可以对DataFrame列进行操作,其中`x`表示Series中的每个元素。下面是一个例子: 假设有一个DataFrame `df`,其中有一列`'col'`: ``` import pandas as pd df = pd.DataFrame({'col': [1, 2, 3, 4, 5]}) ``` 如果想对这一列进行平方操作,可以使用`.apply()`方法: ``` df['col_squared'] = df['col'].apply(lambda x: x**2) ``` 这将创建一个新的列`'col_squared'`,其中每个元素都是原列中对应元素的平方值。 ### 回答2: 在Python使用`.apply(lambda x:)`函数可以对DataFrame的列进行逐个元素的处理。lambda函数接受一个参数x,用来表示DataFrame的每个元素,通过对每个元素进行相应的操作,然后将结果返回。以下是正确使用`.apply(lambda x:)`的示例: 1. 创建DataFrame: ``` import pandas as pd data = {'Name':['Tom', 'Nick', 'John'], 'Age':[20, 25, 30], 'Salary':[3000, 4000, 5000]} df = pd.DataFrame(data) ``` 2. 对列进行处理: ``` df['Age'] = df['Age'].apply(lambda x: x + 1) ``` 上述代码会将'Age'列的每个元素加1,并将结果更新到'Age'列。 3. 返回新的列: ``` df['NewSalary'] = df['Salary'].apply(lambda x: x*1.1) ``` 上述代码会创建一个名为'NewSalary'的列,其中每个元素是原始'Salary'列的对应元素乘以1.1的结果。 4. 使用多个参数: 如果lambda函数需要多个参数,可以使用`.apply()`的`args`参数传递。例如: ``` def calculate_bonus(salary, performance): return salary * performance df['Bonus'] = df['Salary'].apply(lambda x: calculate_bonus(x, 0.1), args=(0.1,)) ``` 上述代码中,定义了一个带有两个参数的函数calculate_bonus(),然后将`args`参数设置为(0.1,),将其传递给`.apply()`函数。lambda函数中的第一个参数x表示'Salary'列的每个元素,0.1表示performance参数的值,通过`args`将其传递给calculate_bonus()函数。 总结:使用`.apply(lambda x:)`函数可以对DataFrame的列进行逐个元素的处理,通过lambda函数对每个元素进行处理,并将结果返回。可以使用`args`参数传递多个参数给lambda函数。 ### 回答3: 在使用Python中的pandas库时,可以通过`.apply(lambda x: )`方法DataFrame的列进行操作。 首先,`.apply()`方法用于将指定的函数应用到DataFrame的每一行或每一列。而`lambda x:`则是一种匿名函数,用于定义一个简单的函数,其中`x`表示输入的参数。 通过`.apply(lambda x: )`可以实现对DataFrame的每个元素进行自定义操作。例如,我们有一个DataFrame `df`,其中有一列`column1`,我们想要对该列的每个元素进行平方操作,可以使用以下代码: ```python df['column1'] = df['column1'].apply(lambda x: x**2) ``` 这段代码会遍历`df`中`column1`列的每个元素,并将其平方后重新赋值给原来的位置。 除了简单的数学操作,`.apply()`方法还可以用于处理更复杂的函数。例如,我们有一个自定义函数`my_function()`,希望将该函数应用到`df`的每一行,可以使用以下代码: ```python df = df.apply(lambda x: my_function(x), axis=1) ``` 这段代码会将`my_function()`应用到`df`的每一行,其中`axis=1`表示按行进行操作。 需要注意的是,在使用`.apply(lambda x: )`时,要确保所定义的函数和每个元素的数据类型相匹配,以防止出现意外的错误。另外,`.apply()`方法是一种相对较慢的操作,如果需要处理较大的DataFrame,可能需要考虑使用其他更高效的方法

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值