Pandas DataFrame.apply()简介及实例

819 阅读5分钟

Pandas DataFrame.apply()

Pandas DataFrame.apply()简介

当熊猫的数据结构中的每一个值都需要以某种特定的方式进行操作或运算时,就可以使用pandas.apply()函数。apply()方法是用来对熊猫数据结构中的每个值应用一些特定的函数。被应用到函数的Objects如果是一个系列,则以索引(axis=0)开始,或者是DataFrame的列(axis=1)。 默认情况下(result_type=None),函数的返回值作为最终返回元素。在本主题中,我们将学习Pandas DataFrame.apply()。

语法

下面是提到的语法

DataFrame.apply(self, function, axis=0, raw=False, result_type=None, args=(), return)
参数参数描述
函数表示需要应用于熊猫数据结构的函数。
表示需要应用该函数的列或行。{0或 "索引",1或 "列"},默认为0

应用该函数的轴。

0或'index':对每一列应用函数。

1或'列':将函数应用于每一行。

原始决定数据的传递方式,是系列还是ndarray。

False:数据以数据帧系列的形式传递

真:数据以ndarray对象的形式传递。值得注意的是,在制作Numpy还原函数的过程中,取得了更好的性能。

Result_type当使用的轴的值为1时,result_type适用,它代表列。

1)'扩展'。扩展允许一个列表值被垂直转换为一个列

2) '减少'。与expand完全相反,一个列值将被减少成一个列表类的项目。

3) '广播'。这里,数据框架的实际形状将被视为结果。这里将保留核心索引值。

args代表传递给函数的所有参数

Pandas DataFrame.apply()的例子

下面提到了不同的例子。

例子#1

代码

import pandas as pd
Core_Series = pd.Series([ 1, 6, 11, 15, 21, 26])
print("   THE CORE SERIES ")
print(Core_Series)
Lambda_Series = Core_Series.apply(lambda Value : Value * 10)
print("")
print("   THE LAMBDA SERIES ")
print(Lambda_Series)

输出

Pandas DataFrame.apply() output 1

解释 这里,pandas库最初被导入,导入的库被用来创建一个系列。系列中的值是以这样的方式制定的,即它们是1到n的系列。apply()方法被放置在这个系列上,有一个lambda函数。lambda函数负责从系列中提取每个值并将其乘以10。因此,在这个过程的最后,系列中的每一个项目都被乘以10。得到的数值被记录在一个叫做lambda系列的序列中,并被打印到控制台中。我们可以清楚地注意到,lambda系列包含了核心系列中所有10倍的数值。

例子 #2

代码

import pandas as pd
Core_Dataframe = pd.DataFrame({'A' :  [ 1, 6, 11, 15, 21, 26],
'B' :  [2, 7, 12, 17, 22, 27],
'C' :  [3, 8, 13, 18, 23, 28],
'D' :  [4, 9, 14, 19, 24, 29],
'E' :  [5, 10, 15, 20, 25, 30]})
print("   THE CORE DATAFRAME ")
print(Core_Dataframe)
Lambda_Dataframe = Core_Dataframe.apply(lambda Value : Value * 10)
print("")
print("   THE LAMBDA DATAFRAME ")
print(Lambda_Dataframe)

输出

Pandas DataFrame.apply() output 2

解释 在这里,pandas库最初被导入,导入的库被用来创建数据框架,它是一个shape(6,6)。数据框架中的所有列都被分配了标题,这些标题是按字母顺序排列的。数据框架中的值是以这样的方式制定的,即它们是1到n的系列。这个数据框架在这里被程序化地命名为核心数据框架。apply()方法用一个lambda函数放在这个数据框架上。lambda函数负责从数据框架中获取每个值并将其乘以10。因此,在这个过程结束时,数据框架中的每一个项目都被乘以10。得到的值被捕获在一个叫做lambda数据框的数据框中,并被打印到控制台中。我们可以清楚地注意到,lambda数据框中包含了核心数据框中所有10的倍数的值。

例子 #3

代码

import pandas as pd
def Value_range_check(value):
if value < 50:
return "Low"
elif value >= 50 and value < 100:
return "Normal"
elif value > 100:
return "High"
final_dataframe = pd.DataFrame([])
Core_Dataframe = pd.DataFrame({'A' :  [ 1, 6, 11, 15, 21, 26],
'B' :  [2, 7, 12, 17, 22, 27],
'C' :  [3, 8, 13, 18, 23, 28],
'D' :  [4, 9, 14, 19, 24, 29],
'E' :  [5, 10, 15, 20, 25, 30]})
print("   THE CORE DATAFRAME ")
print(Core_Dataframe)
Lambda_Dataframe = Core_Dataframe.apply(lambda Value : Value * 10)
print("")
print("   THE LAMBDA DATAFRAME ")
print(Lambda_Dataframe)
Lambda_Dataframe_size = (Lambda_Dataframe.shape[0] * Lambda_Dataframe.shape[0])
print("")
print("OVERALL DATFRAME SIZE: ", Lambda_Dataframe_size)
for i in range(Lambda_Dataframe.shape[1]):
Value_checked_dataframe = Lambda_Dataframe.iloc[:,i].apply(Value_range_check)
final_dataframe.insert(i,i,Value_checked_dataframe)
print("")
print("  FINAL DATAFRAME ")
print(final_dataframe)

输出

output 3

解释 上面例子中的所有初始操作在这里再次重复;更具体地说,在这个例子中,apply()方法被以两种方式使用,正如上面所讨论的,在第一个例子中,apply()方法被用于一个lambda函数,但在下一个例子中,它被应用于一个普通函数。这个函数被应用在lambda数据帧上。在这里,该函数被用来将lambda函数中达到的每一个值隔离在三个不同的类别下:低、正常和高。例如,如果一个值在50以内,它就被命名为低,然后50至100以内的值被命名为正常;最后,100以上的值被命名为高。为了将结果系列形成一个数据框架,lambda数据框架中的每一列都通过使用iloc作为列参考传递给apply函数。因此返回的输出也将是一列数值。为了将每一列插入到数据框架中,我们使用了insert()方法。最后的数据框架被打印到控制台。

结论

pandas中的apply()方法显示了以最灵活的方式对数据框架中的每一个值进行操作的灵活性。它还描述了与该函数相关的分类功能集。