网站首页 > 技术文章 正文
20231231星期日:
2023年最后一天:
# 知识点:apply:
# apply应用在Pandas中,其核心功能其实可以概括为一句话:我本身不处理数据,我们只是数据的搬运工。
# 理解apply核心在于明确两个环节:调度函数和作用对象
# 1,调度函数就是apply接收的参数,既可以是Python内置的函数,也支持自定义函数,或者匿名函数lambda。只要符合指定的作用对象(即是标量scalar,还是一行或一列series,亦或一个dataframe)即可。
# 2,作用对象则取决于调用apply的对象类型,具体来说:
# a,一个Series对象调用apply时,数据处理函数作用于该Series的每个元素上,即作用对象是一个标量,实现从一个Series转换到另一个Series;
# b,一个DataFrame对象调用apply时,数据处理函数作用于该DataFrame的每一行或者每一列上,即作用对象是一个Series,实现从一个DataFrame转换到一个Series上;
# c,一个DataFrame对象经过groupby分组后调用apply时,数据处理函数作用于groupby后的每个子dataframe上,即作用对象还是一个DataFrame(行是每个分组对应的行;列字段少了groupby的相应列),实现从一个DataFrame转换到一个Series上。
# DataFrame.apply(self, func, axis=0, raw=False, result_type=None, args=(), **kwargs)
# func:函数或 lambda 表达式,应用于每行或者每列
# axis:{0 or ‘index’, 1 or ‘columns’}, 默认为0
# 0 or ‘index’: 表示函数处理的是每一列
# 1 or ‘columns’: 表示函数处理的是每一行
import pandas as pd
# 总结:apply()可以应用的函数类型如下:
# df.apply(fun) # 自定义
# df.apply(max) # Python内置函数
# df.apply(lambda x:x*2) # lambda
# df.apply(np.mean) # NumPy等其他库的函数
# df.apply(pd.Series.first_valid_index) # Pandas自己的函数
# 按列进行apply:
df = pd.DataFrame([['liver', 'E', 89, 21, 24, 64],
['Arry', 'C', 36, 37, 37, 57],
['Ack', 'A', 57, 60, 18, 84],
['Eorge', 'C', 93, 96, 71, 78],
['Oah', 'D', 65, 49, 61, 86]
],
columns=['name', 'team', 'Q1', 'Q2', 'Q3', 'Q4'])
# 案例一:
# 将name列中的文本全部转换成小写
df['name'] = df.name.apply(lambda x: x.lower())
print(df)
# name team Q1 Q2 Q3 Q4
# 0 liver E 89 21 24 64
# 1 arry C 36 37 37 57
# 2 ack A 57 60 18 84
# 3 eorge C 93 96 71 78
# 4 oah D 65 49 61 86
# 案例二:
df = pd.DataFrame({'a':[1,2,1,2],'b':[3,4,5,6]})
print(df)
# ndf = df.apply(lambda x:x+2,axis=0)
# print(ndf)
# print(df.groupby('a').sum())
# b
# a
# 1 8
# 2 10
# 案例三:
##针对某一列
# data = df['a'].apply(lambda x: 10 if x<3 else 0)
# df['a'] = df['a']+data
# print(df)
# a b
# 0 11 3
# 1 12 4
# 2 11 5
# 3 12 6
# 案例四:
##针对所有列
df = df.apply(lambda x:x+3,axis=0)
print(df)
# a b
# 0 4 6
# 1 5 7
# 2 4 8
# 3 5 9
# 案例五:自定义函数,且有带传参,args=(200,),传入的是元祖
import pandas as pd
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Age': [25, 30, 35, 40],
'Salary': [50000, 70000, 90000, 110000]
}
df = pd.DataFrame(data)
print(df)
# Name Age Salary
# 0 Alice 25 50000
# 1 Bob 30 70000
# 2 Charlie 35 90000
# 3 David 40 110000
def double_salary(x,y):
return 2 * x+y
# 对工资进行加倍,并加200:不加axis=0,默认是对列进行处理
df['Salary'] = df['Salary'].apply(double_salary,args=(200,))
print(df['Salary'])
# 0 100200
# 1 140200
# 2 180200
# 3 220200
print(df)
# Name Age Salary
# 0 Alice 25 100200
# 1 Bob 30 140200
# 2 Charlie 35 180200
# 3 David 40 220200
猜你喜欢
- 2024-11-16 3.1 Python高级编程-函数式编程工具
- 2024-11-16 面向对象编程的一些思考(面向对象编程的理解)
- 2024-11-16 知识总结-Java8 Stream函数式编程
- 2024-11-16 bind、call、apply 区别?如何实现一个bind?
- 2024-11-16 Javascript基础重拾笔记之手写apply、call
- 2024-11-16 java 8新特性 常用内置函数式接口
- 2024-11-16 7、JavaScript 内置的常用对象有哪些?该对象常用的方法(必会)
- 2024-11-16 Java中“::”是什么含义(java中+是什么)
- 2024-11-16 Java 8 中的 Function:让代码从繁琐到简洁的魔法工具
- 2024-11-16 13万字详细分析JDK中Stream的实现原理(中)
- 标签列表
-
- content-disposition (47)
- nth-child (56)
- math.pow (44)
- 原型和原型链 (63)
- canvas mdn (36)
- css @media (49)
- promise mdn (39)
- readasdataurl (52)
- if-modified-since (49)
- css ::after (50)
- border-image-slice (40)
- flex mdn (37)
- .join (41)
- function.apply (60)
- input type number (64)
- weakmap (62)
- js arguments (45)
- js delete方法 (61)
- blob type (44)
- math.max.apply (51)
- js (44)
- firefox 3 (47)
- cssbox-sizing (52)
- js删除 (49)
- js for continue (56)
- 最新留言
-