pandas篇之apply函数

文章介绍了Pandas的apply函数,它用于对DataFrame的数据进行列级别的操作。应用包括计算列的最大值与最小值之差、条件赋值、自定义函数处理以及特定列的平方等。此外,还展示了如何处理两列之间的差值和应用自定义函数更新数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是apply函数

apply函数是一个非常好用的lmada函数,我们可以将函数或者参数直接传到apply函数参数表上,可以实现批量的复杂的复杂的操作。apply函数是以列为单位获取数据的,但处理的时候又是以行为单位操作数据,即获取指定的列的数据后,再进行行之间的数据的操作,这一点也比较符合我们的逻辑。

案例

操作全列的数据

这里用列的最大数据减去最小的数据,获取中间的差值

df = data.apply(lambda x: x.max() - x.min())
print(df)

进行比较

##针对某一列
df = data['A'].apply(lambda x: 10 if x<0  else 0)
data['A'] = data['A']+df
print(data)

函数的传递

##处理A列
def  udpateState(num,goal):
     if num>9:
        num=num-goal
        return num 
     return num

dt1 = data.A.apply(udpateState,args=(9,))
print(dt1)
#处理指定的位置
dt2 = data.apply(lambda x : np.square(x) if x.name == 'A' else x, axis=1)
print(dt2)

##两列相减
def  udpateState2(datalist,start,end):
    return datalist[start]-datalist[end]
dt3 = data.apply(udpateState2,axis=1,args=('A','B'))
print(dt3)

代码汇总

import pandas as pd
import numpy as np
#日期数据
date = pd.date_range('20230303',periods=6)
data = pd.DataFrame(np.random.randn(6,4),index=date,columns=list('ABCD'))
##按照列名
df = data.apply(lambda x: x.max() - x.min())
print(df)
##针对某一列
df = data['A'].apply(lambda x: 10 if x<0  else 0)
data['A'] = data['A']+df
print(data)
##处理A列
def  udpateState(num,goal):
     if num>9:
        num=num-goal
        return num 
     return num

dt1 = data.A.apply(udpateState,args=(9,))
print(dt1)
#处理指定的位置
dt2 = data.apply(lambda x : np.square(x) if x.name == 'A' else x, axis=1)
print(dt2)

##两列相减
def  udpateState2(datalist,start,end,end2):
    return datalist[start]-datalist[end]
dt3 = data.apply(udpateState2,axis=1,args=('A','B','c'))
print(dt3)

### Pandas `apply` 函数详解 #### 基本概念 PandasPython 数据分析领域的重要工具之一,其核心对象 DataFrame 提供了许多高效的数据操作方法。其中,`apply()` 函数是一个非常灵活的工具,可以用来对 DataFrame 或 Series 的行或列应用自定义函数。 --- #### 适用范围 `apply()` 可以应用于两种主要场景: 1. **针对 Series (单列)**:当需要对某一行或多行数据逐项处理时。 2. **针对 DataFrame (整表)**:当需要按照行或列维度批量处理数据时。 --- #### 参数说明 `apply(func, axis=0)` - `func`: 自定义函数或者内置函数,用于指定如何转换输入数据。 - `axis`: 控制作用方向,默认为 `0` 表示沿列(垂直),设置为 `1` 则表示沿行(水平)。 --- #### 示例代码 ##### 1. 针对 Series 使用 `apply` 对于单一列的应用,可以通过 `apply` 实现复杂逻辑运算。例如: ```python import pandas as pd # 创建一个简单的 DataFrame data = {'A': [1, 2, 3]} df = pd.DataFrame(data) # 对列 A 中的每个值进行平方操作 df['B'] = df['A'].apply(lambda x: x ** 2) print(df) ``` 运行结果如下: ``` A B 0 1 1 1 2 4 2 3 9 ``` 此例展示了如何利用匿名函数 (`lambda`) 来实现简单变换[^3]。 --- ##### 2. 针对 DataFrame 整体使用 `apply` 在更复杂的场景下,可能需要跨多个字段完成计算任务。下面的例子演示了如何基于每行数据求和并新增一列存储结果。 ```python import pandas as pd # 构造学生分数表格 data = { '数学': [90, 80, 85], '英语': [95, 70, 88], '科学': [85, 90, 80] } df = pd.DataFrame(data) def total_score(row): """ 计算总分 """ return row.sum() # 添加新列保存每位同学的成绩总计 df['总成绩'] = df.apply(total_score, axis=1) print(df) ``` 输出效果为: ``` 数学 英语 科学 总成绩 0 90 95 85 270 1 80 70 90 240 2 85 88 80 253 ``` 这里通过显式定义辅助函数来增强可读性和复用能力[^5]。 --- ##### 3. 调用内置函数作为参数传递给 `apply` 除了支持用户编写的新规外,还可以直接传入标准库里的现有功能。比如统计字符串长度的情况: ```python import pandas as pd # 初始化样例数据集 names_df = pd.DataFrame({ '姓名': ['张三', '李四', '王五'] }) # 获取名字对应的字节数量 names_df['名字符数'] = names_df['姓名'].apply(len) print(names_df) ``` 最终打印内容形如: ``` 姓名 名字符数 0 张三 2 1 李四 2 2 王五 2 ``` 上述过程体现了简洁高效的特性[^2]。 --- #### 注意事项 尽管 `apply` 功能强大,在性能上却未必总是最优解。特别是面对大规模数据集时,应优先考虑矢量化表达式代替迭代器模式下的逐一访问策略;另外需要注意的是,如果目标仅限于基础数值型数组,则 NumPy 往往能提供更快捷的方式替代之。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值