您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Pandas中apply函数怎么用
`apply()`是Pandas库中最强大且最常用的函数之一,它允许用户对DataFrame或Series的行/列执行自定义操作。本文将详细介绍`apply()`的核心用法、性能优化技巧以及实际应用场景。
## 一、apply函数基础
### 1.1 基本语法
```python
DataFrame.apply(func, axis=0, raw=False, result_type=None, args=(), **kwargs)
func
:要应用的函数axis
:应用方向(0: 列方向,1: 行方向)raw
:是否将数据作为ndarray传递(默认False,传递Series)result_type
:控制返回类型(’expand’/‘reduce’/‘broadcast’)args
:传递给func的位置参数import pandas as pd
import numpy as np
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9]
})
# 对每列求和
df.apply(np.sum, axis=0)
# 对每行求和
df.apply(np.sum, axis=1)
s = pd.Series([1, 2, 3, 4])
# 平方处理
s.apply(lambda x: x**2)
# 更高效的向量化操作(推荐)
s ** 2
# 计算每列的平均值
df.apply(np.mean)
# 等价于
df.mean()
# 计算每行的最大值
df.apply(lambda row: max(row), axis=1)
# 等价于
df.max(axis=1)
# 处理多列数据
def complex_func(row):
return row['A'] * 2 + row['B'] / 3
df.apply(complex_func, axis=1)
def power(x, n):
return x ** n
df['A'].apply(power, args=(3,))
def multi_output(row):
return pd.Series({
'sum': row.sum(),
'mean': row.mean()
})
df.apply(multi_output, axis=1)
# 自动扩展为多列
df.apply(lambda x: [x.min(), x.max()],
axis=1,
result_type='expand')
# 不推荐
df.apply(lambda x: x*2)
# 推荐(快10-100倍)
df * 2
# 不推荐
df.apply(np.sum)
# 推荐
df.sum()
from numba import jit
@jit
def numba_func(x):
# 复杂计算逻辑
return result
df.apply(numba_func)
# 清洗异常值
def clean_data(x):
if x > 100:
return np.nan
return x
df.applymap(clean_data) # 对每个元素应用
# 创建新特征
df['new_feature'] = df.apply(
lambda row: row['height'] / row['weight'],
axis=1
)
# 处理文本列
df['text'].apply(lambda x: x.lower().strip())
函数 | 适用对象 | 特点 |
---|---|---|
apply | DataFrame | 行列方向灵活应用 |
map | Series | 元素级转换 |
函数 | 作用层级 | 性能 |
---|---|---|
apply | 行/列级别 | 中等 |
applymap | 元素级别 | 较慢 |
# agg用于聚合操作
df.agg(['sum', 'mean'])
# transform保持原形状
df.transform(lambda x: x*2)
A1: apply是通用函数,存在函数调用开销,而直接运算使用优化过的底层实现。
A2: 遵循”向量化优先”原则,只有当内置方法无法实现时才考虑apply。
A3: 可以结合swifter
库实现:
import swifter
df.swifter.apply(func)
apply()
是Pandas中极为灵活的工具,但需要合理使用才能平衡功能与性能。掌握其核心用法后,可以优雅地解决许多复杂的数据处理问题。
注意:本文所有代码示例基于Pandas 1.3+版本,部分特性在旧版本中可能不可用。 “`
这篇文章包含了约1750字内容,采用Markdown格式,包含: - 代码块示例 - 对比表格 - 结构化标题 - 实际应用案例 - 性能优化建议 - 常见问题解答
可根据需要进一步扩展特定部分的细节或添加更多实际案例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。