pandas高级篇—apply

本文介绍了使用Pandas库进行数据分析的几种实用技巧,包括利用apply函数处理数据、使用head()函数快速预览数据集以及如何结合cut和qcut函数进行分位数分析。通过这些方法,读者可以更高效地完成数据预处理和探索性分析。

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

1.apply

apply会将待处理的对象拆分成多个片段,然后对各片段调用传入的函数,最后尝试将各片段组合到一起

2.head()

(1)默认查找前五条数据,head(n)查找前n条数据
这里写图片描述
(2)定义函数,(函数名为top)查找前n条数据
这里写图片描述
(3)apply()——–>分别求出抽烟和不抽烟的客户中消费占比排在前五的客户
这里写图片描述
这里写图片描述
(4)如果传给apply的函数能够接受其他参数或关键字,则可以将这些内容放在函数名后面一并传入
这里写图片描述

3.分位数和桶分析

pandas有一些能根据指定面元或样本分位数将数据拆分成多块的工具(比如cut和qcut)。
将这些函数跟groupby结合起来,就能非常轻松地实现对数据集的桶(bucket)或分位数
(quantile)分析了

(1)pd.cut
这里写图片描述
(2)定义函数,对数据进行统计
这里写图片描述
(3)定义函数,求加权平均数
这里写图片描述

### Pandas `apply` 函数详解 #### 基本概念 Pandas 是 Python 数据分析领域的重要工具之一,其核心对象 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、付费专栏及课程。

余额充值