如何在Pandas中把一个函数应用于多个列
Pandas.apply允许用户传递一个函数并将其应用于Pandas系列的每一个值。
pandas.DataFrame.apply的语法
语法 : DataFrame.apply(parameters)
参数 :
- func :应用于每一列或每一行的函数。
- axis:应用该函数的axis
- raw : 决定行或列是作为系列还是ndarray对象传递。
- result_type : ‘expand’, ‘reduce’, ‘broadcast’, None; 默认 None
- args :除了数组/系列之外,要传递给func的位置参数。
- kwds : 额外的关键字参数,作为关键字参数传递给func。
返回:系列或数据框架
例1:Pandas将函数应用于单列
在这个例子中,我们只传递了一个单列,并且用2来递增年龄。
# import the module
import pandas as pd
# creating a DataFrame
df = pd.DataFrame({'String 1': ['Tom', 'Nick', 'Krish', 'Jack'],
'Age': [32, 24, 33, 21]})
# function for prepending 'Geek'
def prepend_geek(age):
return age + 2
# executing the function
df[["Age"]] = df[["Age"]].apply(prepend_geek)
# displaying the DataFrame
display(df)
输出:
例子2 :Pandas将函数应用于多个列
在这里,我们使用Python串联法将一个函数应用于Pandas Dataframe的两列。
# import the module
import pandas as pd
# creating a DataFrame
df = pd.DataFrame({'String 1' :['Tom', 'Nick', 'Krish', 'Jack'],
'String 2' :['Jane', 'John', 'Doe', 'Mohan']})
# function for prepending 'Geek'
def prepend_geek(name):
return 'Geek ' + name
# executing the function
df[["String 1", "String 2"]] = df[["String 1",
"String 2"]].apply(prepend_geek)
# displaying the DataFrame
display(df)
输出 :
例子3:Pandas对所有列应用函数
在这里,我们通过调用multiply_by_2函数将所有列都乘以2。
# import the module
import pandas as pd
# creating a DataFrame
df = pd.DataFrame({'Integers' :[1, 2, 3, 4, 5],
'Float' :[1.1, 2.2, 3.3, 4.4 ,5.5],
"Even_no":[2, 4, 6, 8, 10]})
# function for prepending 'Geek'
def multiply_by_2(number):
return 2 * number
# executing the function
df = df.apply(multiply_by_2)
# displaying the DataFrame
display(df)
输出 :
例子4:使用Numpy对单列进行Pandas应用函数
在这个例子中,我们只将panda的apply函数应用于一个单列,即整数,并使用numpy.square将其变为平方。
# import the module
import pandas as pd
import numpy as np
# creating a DataFrame
df = pd.DataFrame({'Integers' :[1, 2, 3, 4, 5],
'Float' :[1.1, 2.2, 3.3, 4.4 ,5.5],
"Even_no":[2, 4, 6, 8, 10]})
# executing the function
df["Integers"] = df["Integers"].apply(np.square)
# displaying the DataFrame
display(df)
例子5:Pandas使用lambda对所有列应用函数
在这个例子中,我们将panda的apply函数应用于所有列,并使用Python lambda将所有列与5相加。
# import the module
import pandas as pd
# creating a DataFrame
df = pd.DataFrame({'Integers' :[1, 2, 3, 4, 5],
'Float' :[1.1, 2.2, 3.3, 4.4 ,5.5],
"Even_no":[2, 4, 6, 8, 10]})
# executing the function
df = df.apply(lambda x: x+5)
# displaying the DataFrame
display(df)