微网站内容页模板,外贸网站如何做推广多少钱,同一个服务器可以做多个网站,获客渠道有哪些文章目录 一. Series的apply方法1. 一个元素一个元素的传入2. apply传入一个参数函数2.apply传入多个参数函数 二. DataFrame的apply方法1. axis参数指定按行/ 按列(默认)传入数据2. apply使用 三. apply 使用案例1. 栗子12. 栗子2-列3. 栗子3-行 四. 向量化函数1. 使用np.vect… 文章目录 一. Series的apply方法1. 一个元素一个元素的传入2. apply传入一个参数函数2.apply传入多个参数函数 二. DataFrame的apply方法1. axis参数指定按行/ 按列(默认)传入数据2. apply使用 三. apply 使用案例1. 栗子12. 栗子2-列3. 栗子3-行 四. 向量化函数1. 使用np.vectorize将函数向量化2. 使用装饰器将函数向量化 五. lambda函数 简介 Pandas提供了很多数据处理的API,但当提供的API不能满足需求的时候,需要自己编写数据处理函数, 这个时候可以使用apply函数 apply函数可以接收一个自定义函数, 可以将DataFrame的行/列数据传递给自定义函数处理 apply函数类似于编写一个for循环, 遍历行/列的每一个元素,但比使用for循环效率高很多 一. Series的apply方法
1. 一个元素一个元素的传入
def my_print(x):print(****************)print(x)print(type(x))return xdf[a].apply(my_print)2. apply传入一个参数函数
准备数据
import pandas as pd
df pd.DataFrame({a:[10,20,30],b:[40,50,60]})
df创建一个自定义函数
def my_sq(x):求平方return x**2apply方法有一个func参数, 把传入的函数应用于Series的每个元素
df[a].apply(my_sq)注意,把my_sq传递给apply的时候,不要加上圆括号 2.apply传入多个参数函数
def my_exp(x,e):return x**edf[a].apply(my_exp,e3)二. DataFrame的apply方法
1. axis参数指定按行/ 按列(默认)传入数据
def my_func(x):print(x)print(x的数据类型是,type(x))return xdf.apply(my_func)def my_func(x):print(x)print(x的数据类型是,type(x))return xdf.apply(my_func,axis 1)2. apply使用
把上面创建的my_exp, 直接应用到整个DataFrame中
df.apply(my_exp,e2)def avg_3(col):x col[0]y col[1]z col[2]return (xyz)/3df.apply(avg_3)def avg_2(row):x row[0]y row[1]return (xy)/2df.apply(avg_2, axis1)三. apply 使用案例
使用titanic数据集来介绍apply的用法
加载数据
titanic pd.read_csv(data/titanic_train.csv)
titanic.head()titanic.info()该数据集有891行,12列, 其中age 和 Cabin,Embarked三列中包含缺失值
1. 栗子1
import numpy as np#可以使用apply计算数据中有多少null 或 NaN值
def count_missing(vec):#计算一列中缺失值的个数#根据值是否确实获取一个由True和False组成的向量null_vec pd.isnull(vec)#print(null_vec)null_count np.sum(null_vec)return null_count#缺失值占比
def prop_missing(vec):# 计算一列中缺失值的占比# 计算缺失值的个数#这里使用count_missing()num count_missing(vec) #获得向量中元素的个数#也需要统计缺失值个数dem vec.sizereturn num/dem# 非缺失值占比
def prop_complete(vec):#计算一列非缺失值(完整值)占比#先计算缺失值比例#再计算非缺失值比例return 1-prop_missing(vec)把前面定义好的函数应用于数据的各列
titanic.apply(count_missing)titanic.apply(prop_missing)titanic.apply(prop_complete)把前面定义好的函数应用于数据的各行
titanic.apply(count_missing ,axis 1)titanic.apply(prop_missing ,axis 1)titanic.apply(prop_complete ,axis 1)titanic.apply(count_missing, axis1).value_counts()2. 栗子2-列
def cut_age(age):if age18:return 未成年elif 18age40:return 青年elif 40age60:return 中年elif 60age81:return 老年else:return 未知titanic[Age].apply(cut_age).value_counts()#筛选出年龄大于60的数据
titanic[titanic[Age]60]3. 栗子3-行
# Pclass 1 并且 Name中 包含了Master/Dr/Sir
def get_vip(x):if x[Pclass] 1 and (Master in x[Name] or Dr in x[Name] or Sir in x[Name] ):return VIPelse:return Normaltitanic[vip] titanic.apply(get_vip,axis1)
titanic[vip].value_counts()# 筛选出vip客户
titanic[titanic[vip]VIP]四. 向量化函数
创建一个DataFrame
df pd.DataFrame({a:[10,20,30],b:[20,30,40]})创建函数
def avg_2(x,y):return (xy)/2
avg_2(df[a],df[b])修改函数
def avg_2_mod(x,y):if x20:return np.nanreturn (xy)/2
avg_2(df[a],df[b])1. 使用np.vectorize将函数向量化
avg_2_mod_vec np.vectorize(avg_2_mod)
avg_2_mod_vec(df[a], df[b])2. 使用装饰器将函数向量化
np.vectorize
def avg_2_mod(x,y):if x20:return np.nanreturn (xy)/2
avg_2_mod(df[a],df[b])五. lambda函数
当函数比较简单的时候, 没有必要创建一个def 一个函数, 可以使用lambda表达式创建匿名函数
df.apply(lambda x: x1)