如何使用 Pandas apply() 的 inplace 参数?


Pandas 中的 apply() 函数用于将自定义函数应用于数据框或序列。apply() 函数可用于对数据执行转换、计算和其他操作。默认情况下,apply() 函数返回一个新的数据框或序列。我们也可以使用 apply() 函数的 inplace 参数来修改数据框或序列。在本文中,我们将通过示例了解如何使用 inplace 参数。

apply() 函数的语法

df.apply(func, axis=0)

这里,df 是我们需要在其上应用函数 func 的数据框。axis 参数用于将应用的函数设置为行 (axis=0) 或列 (axis=1)。func 可以是内置函数或自定义函数。

不使用 inplace 参数的 apply() 方法

当我们不使用 apply() 函数的 **inplace** 参数时,它会返回一个新的数据框或序列,而原始数据框保持不变。

示例

在下面的示例中,我们有一个包含“姓名”列的数据框。我们定义了一个自定义函数 add_prefix(),它会在每个姓名前添加前缀“Mr.”。通过在“姓名”列上使用 **apply()**,我们得到一个新的序列 **new_df**,其中包含修改后的姓名。

Open Compiler
import pandas as pd # Create a DataFrame data = {'Name': ['John', 'Emily', 'James', 'Emma'], 'Age': [28, 32, 25, 29]} df = pd.DataFrame(data) # Function to add a prefix to names def add_prefix(name): return 'Mr. ' + name # Apply the function to the 'Name' column new_df = df['Name'].apply(add_prefix) # Output the new DataFrame print(new_df)

输出

0     Mr. John
1    Mr. Emily
2    Mr. James
3     Mr. Emma
Name: Name, dtype: object

使用 inplace 参数的 apply() 方法

通过将 inplace 参数传递给 **apply()** 方法,我们可以直接修改原始数据框或序列。我们需要将 inplace 参数指定为 **True**。

示例

在下面的示例中,我们首先创建一个包含“姓名”和“年龄”列的数据框。然后,定义一个自定义函数 **add_prefix()**,用于在每个姓名前添加前缀“Mr.”。将 **apply()** 函数与 **add_prefix()** 函数一起应用于“姓名”列,并将 inplace=True 参数设置为直接修改原始数据框。最后,打印修改后的数据框,显示“姓名”列中添加了前缀的姓名。

import pandas as pd # Create a DataFrame data = {'Name': ['John', 'Emily', 'James', 'Emma'], 'Age': [28, 32, 25, 29]} df = pd.DataFrame(data) # Function to add a prefix to names def add_prefix(name): return 'Mr. ' + name # Apply the function to the 'Name' column in-place df['Name'].apply(add_prefix, inplace=True) # Output the modified DataFrame print(df)

输出

       Name  Age
0   Mr. John   28
1  Mr. Emily   32
2  Mr. James   25
3   Mr. Emma   29

Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.

使用 apply 函数处理多个列

我们可以使用 axis 参数将 **apply()** 函数应用于多个列。如果我们传递 axis=1,则 apply 方法按列应用;如果 axis 参数传递为 axis=0,则 apply() 方法按行应用。

示例

在下面的示例中,我们有一个包含三列的数据框:“姓名”、“年龄”和“薪水”。process_data() 函数用于在“姓名”列添加前缀“Mr.”,并将“薪水”列的值加倍。通过使用带 axis=1 的 apply() 应用此函数到指定的列,我们可以直接修改原始数据框 df。

Open Compiler
import pandas as pd # Create a DataFrame data = {'Name': ['John', 'Emily', 'James', 'Emma'], 'Age': [28, 32, 25, 29], 'Salary': [50000, 60000, 45000, 55000]} df = pd.DataFrame(data) # Function to add a prefix to names and double the salary def process_data(row): row['Name'] = 'Mr. ' + row['Name'] row['Salary'] *= 2 return row # Apply the function to multiple columns df[['Name', 'Salary']] = df[['Name', 'Salary']].apply(process_data, axis=1) # Output the modified 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

何时使用 inplace 参数的 apply() 方法

将 inplace 参数设置为 **`True`** 的 **apply()** 方法主要用于在不创建新对象的情况下修改原始数据框或序列。这将有助于节省内存并提高性能,尤其是在处理大型数据集时。

有时,使用将 inplace 参数设置为 True 的 apply() 方法来修改原始数据可能会很危险,因为它可能会导致意外结果或数据丢失,如果处理不当。通常建议在使用 apply() 方法修改数据之前备份原始数据。

结论

在本文中,我们讨论了如何使用 Pandas 的 apply() 方法的 inplace 参数,以及如何使用它将自定义函数应用于数据框的列或序列。默认情况下,apply() 方法会返回一个应用了函数的新数据框或序列。如果我们想修改原始数据框,我们需要将 inplace 参数指定为 true。

更新于:2023年10月13日

676 次浏览

开启你的 职业生涯

完成课程获得认证

开始学习
广告