如何就地使用 Pandas apply()?
Pandas 中的 apply() 函数用于将自定义函数应用于数据框或系列。apply() 函数可用于对数据执行转换、计算和其他操作。apply() 函数默认返回一个新的数据框或系列。我们还可以使用 apply() 函数的 inplace 参数来修改数据框或系列。在本文中,我们将借助示例了解如何就地使用 apply() 函数。
apply() 函数的语法
df.apply(func, axis=0)
这里,df 是我们需要应用函数 func 的数据框。axis 参数用于将应用的函数设置为行(axis=0)或列(axis=1)。 func 可以是内置函数或自定义函数。
使用不带 inplace 参数的 apply() 方法
当我们不使用 inplace 参数与 apply() 函数时,它会返回一个新的数据框或系列,而原始数据框保持不变。
示例
在下面的例子中,我们有一个带有 'Name' 列的数据框。我们定义一个自定义函数 add_prefix(),为每个名称添加前缀 'Mr.'。通过在"Name"列上使用 apply(),我们获得了一个带有修改后的名称的新系列 new_df。
import pandas as pd # 创建一个 DataFrame data = {'Name': ['John', 'Emily', 'James', 'Emma'], 'Age': [28, 32, 25, 29]} df = pd.DataFrame(data) # 为名称添加前缀的函数 def add_prefix(name): return 'Mr. ' + name # 将函数应用于"Name"列 new_df = df['Name'].apply(add_prefix) # 输出新的 DataFrame print(new_df)
输出
0 Mr. John 1 Mr. Emily 2 Mr. James 3 Mr. Emma Name: Name, dtype: object
就地使用apply()方法
通过将inplace参数传递给apply()方法,我们可以就地修改原始数据框或系列。我们需要将inplace参数指定为True。
示例
在下面的示例中,我们首先创建一个包含"Name"和"Age"列的DataFrame。然后,定义自定义函数add_prefix()以在每个名称中添加前缀"Mr."。将apply()函数与add_prefix()函数一起应用于"Name"列,并设置inplace=True参数以直接修改原始DataFrame。最后,打印修改后的 DataFrame,在 'Name' 列中显示已添加前缀的姓名。
import pandas as pd # 创建 DataFrame data = {'Name': ['John', 'Emily', 'James', 'Emma'], 'Age': [28, 32, 25, 29]} df = pd.DataFrame(data) # 为姓名添加前缀的函数 def add_prefix(name): return 'Mr. ' + name # 将函数就地应用于 'Name' 列 df['Name'].apply(add_prefix, inplace=True) # 输出修改后的 DataFrame print(df)
输出
Name Age 0 Mr. John 28 1 Mr. Emily 32 2 Mr. James 25 3 Mr. Emma 29
使用 apply 函数处理多列
我们可以使用 axis 参数将 apply () 函数应用于多列。如果我们传递 axis=1,apply 方法将按列应用,如果传递 axis 参数为 axis=0,apply() 方法将按行应用。
示例
在下面的示例中,我们有一个包含三列的 DataFrame:"Name"、"Age"和"Salary"。process_data() 函数被定义为将前缀"Mr."添加到"Name"列并将"Salary"列中的值加倍。通过使用 axis=1 的 apply() 将此函数应用于指定列,我们可以就地修改原始 DataFrame df。
import pandas as pd # 创建 DataFrame data = {'Name': ['John', 'Emily', 'James', 'Emma'], 'Age': [28, 32, 25, 29], 'Salary': [50000, 60000, 45000, 55000]} df = pd.DataFrame(data) # 用于在名称中添加前缀并将薪水翻倍的函数 def process_data(row): row['Name'] = 'Mr. ' + row['Name'] row['Salary'] *= 2 return row # 将函数应用于多列 df[['Name', 'Salary']] = df[['Name', 'Salary']].apply(process_data, axis=1) # 输出修改后的 DataFrame print(df)
输出
Name Age Salary 0 Mr. John 28 100000 1 Mr. Emily 32 120000 2 Mr. James 25 90000 3 Mr. Emma 29 110000
何时就地使用apply()方法
当我们想要修改原始数据框或系列而不创建新对象时,主要使用将inplace参数设置为`True`的apply()方法。这将有助于节省内存并提高性能,尤其是在处理大型数据集时。
有时使用将inplace参数设置为True的apply()方法修改原始数据可能会有风险,因为如果处理不当,可能会导致意外结果或数据丢失。通常建议在使用apply()方法修改数据之前备份原始数据。
结论
在本文中,我们讨论了如何就地使用Pandas apply()方法并将自定义函数应用于数据框列或系列。默认情况下,apply()方法返回一个应用了函数的新数据框或系列。如果我们想修改原始数据框,我们需要将 inplace 参数指定为 true。