使用pandas.apply()将一个函数应用到Dataframe的每一行或每一列,可以用于数据清洗、特征工程等操作。下面我会详细讲解该过程,并通过实例说明。
函数定义
首先需要定义一个可以被应用的函数,即将要被应用的函数。下面我们以计算每行的和为例定义一个函数:
def sum_row(row):
return row.sum()
以上函数传入一行数据,返回该行数据的总和。
Dataframe读取与处理
假设有一个含有5个样本、每个样本含有3个特征的Dataframe:
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.rand(5,3),columns=['A','B','C'])
print(df)
输出:
A B C
0 0.612656 0.691772 0.479679
1 0.250064 0.331283 0.859578
2 0.068319 0.783218 0.463536
3 0.882040 0.928043 0.169694
4 0.969441 0.127253 0.599785
行apply
首先我们将函数应用到每一行,即按行计算每个样本特征的总和:
df['sum'] = df.apply(sum_row,axis=1)
print(df)
其中axis=1
表示沿着行进行计算,将函数sum_row
应用到每一行。输出结果为:
A B C sum
0 0.612656 0.691772 0.479679 1.784107
1 0.250064 0.331283 0.859578 1.441924
2 0.068319 0.783218 0.463536 1.315073
3 0.882040 0.928043 0.169694 1.979777
4 0.969441 0.127253 0.599785 1.696478
可以看到结果中新增了一列sum
,即每行特征的总和。
列apply
同样的,可以将函数应用到每一列,计算每个特征的总和:
df.loc['sum'] = df.apply(sum_row,axis=0)
print(df)
其中axis=0
表示沿着列进行计算,将函数sum_row
应用到每一列。输出结果为:
A B C sum
0 0.612656 0.691772 0.479679 1.784107
1 0.250064 0.331283 0.859578 1.441924
2 0.068319 0.783218 0.463536 1.315073
3 0.882040 0.928043 0.169694 1.979777
4 0.969441 0.127253 0.599785 1.696478
sum 2.782520 2.861569 2.572273 8.216358
可以看到结果中新增了一行sum
,即每列特征的总和。
其他参数
apply()
函数还有其他参数可以设置。比如:args
传递额外参数,raw
表示是否传递每一行/列为Series,result_type
返回类型等等。具体可以参考官方文档。
以上就是使用pandas.apply()将函数应用到Dataframe的每一行或每一列的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用pandas.apply()将一个函数应用到Dataframe的每一行或每一列 - Python技术站