如何就地使用 Pandas apply()?

pythonpandasserver side programmingprogramming

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。


相关文章