pandas dataframe apply函数

pandas dataframe apply函数

参考:pandas dataframe apply

Pandas 是一个强大的 Python 数据分析工具库,它提供了许多用于操作数据的功能,其中 apply 函数是一个非常有用的工具,它允许用户对 DataFrame 或 Series 中的数据应用一个函数。本文将详细介绍 apply 函数的使用方法,并通过多个示例代码展示其在不同场景下的应用。

1. apply 函数基础

apply 函数可以被用于 pandas 的 Series 和 DataFrame 对象。当用于 DataFrame 时,你可以沿着行或列应用一个函数。使用 apply 的基本语法如下:

DataFrame.apply(func, axis=0, raw=False, result_type=None, args=(), **kwds)
  • func: 要应用的函数
  • axis: 默认为0,意味着函数应用于每一列。设置为1时,函数将应用于每一行。
  • raw: 默认为False,意味着传递给函数的是pandas对象。如果为True,则传递的是ndarray对象。
  • result_type: {None, ‘expand’, ‘reduce’, ‘broadcast’},定义apply的输出形式。
  • args: 元组,是传递给函数的额外参数。

示例代码 1: 基本的 apply 使用

import pandas as pd

data = {'Name': ['Alice', 'Bob', 'Charles', 'David', 'Edward'],
        'Age': [24, 27, 22, 32, 29]}
df = pd.DataFrame(data)

# 定义一个简单的函数,将年龄增加1
def add_one(x):
    return x + 1

# 使用 apply 函数增加年龄
df['Age'] = df['Age'].apply(add_one)
print(df)

Output:

pandas dataframe apply函数

示例代码 2: 使用 lambda 函数

import pandas as pd

data = {'Name': ['Alice', 'Bob', 'Charles', 'David', 'Edward'],
        'Age': [24, 27, 22, 32, 29]}
df = pd.DataFrame(data)

# 使用 lambda 函数将年龄增加1
df['Age'] = df['Age'].apply(lambda x: x + 1)
print(df)

Output:

pandas dataframe apply函数

2. 在 DataFrame 的行和列上使用 apply

apply 函数可以在 DataFrame 的行或列上使用,这通过 axis 参数控制。

示例代码 3: 对列使用 apply

import pandas as pd

data = {'Name': ['Alice', 'Bob', 'Charles', 'David', 'Edward'],
        'Age': [24, 27, 22, 32, 29]}
df = pd.DataFrame(data)

# 定义一个函数,计算年龄的平均值
def average_age(col):
    return col.mean()

# 使用 apply 函数计算每列的平均年龄
average = df['Age'].apply(average_age)
print(average)

示例代码 4: 对行使用 apply

import pandas as pd

data = {'Name': ['Alice', 'Bob', 'Charles', 'David', 'Edward'],
        'Age': [24, 27, 22, 32, 29],
        'Salary': [50000, 54000, 50000, 62000, 52000]}
df = pd.DataFrame(data)

# 定义一个函数,计算年龄和薪水的总和
def sum_row(row):
    return row['Age'] + row['Salary']

# 使用 apply 函数计算每行的年龄和薪水总和
df['Total'] = df.apply(sum_row, axis=1)
print(df)

Output:

pandas dataframe apply函数

3. 使用 apply 处理更复杂的数据转换

apply 函数非常灵活,可以用来执行复杂的数据转换。

示例代码 5: 使用 apply 进行条件逻辑

import pandas as pd

data = {'Name': ['Alice', 'Bob', 'Charles', 'David', 'Edward'],
        'Age': [24, 27, 22, 32, 29]}
df = pd.DataFrame(data)

# 定义一个函数,根据年龄返回年龄组
def age_group(age):
    if age < 25:
        return 'Young'
    elif age < 30:
        return 'Middle'
    else:
        return 'Senior'

# 使用 apply 函数将年龄转换为年龄组
df['Age Group'] = df['Age'].apply(age_group)
print(df)

Output:

pandas dataframe apply函数

示例代码 6: 使用 apply 结合多个列

import pandas as pd

data = {'Name': ['Alice', 'Bob', 'Charles', 'David', 'Edward'],
        'Age': [24, 27, 22, 32, 29],
        'Salary': [50000, 54000, 50000, 62000, 52000]}
df = pd.DataFrame(data)

# 定义一个函数,根据年龄和薪水判断经济状况
def economic_status(row):
    if row['Age'] < 30 and row['Salary'] > 50000:
        return 'Good'
    else:
        return 'Average'

# 使用 apply 函数判断每个人的经济状况
df['Economic Status'] = df.apply(economic_status, axis=1)
print(df)

Output:

pandas dataframe apply函数

4. 使用 apply 进行数据聚合

apply 函数也可以用来进行数据聚合,尤其是当你需要使用自定义的聚合函数时。

示例代码 7: 自定义聚合函数

import pandas as pd

data = {'Name': ['Alice', 'Bob', 'Charles', 'David', 'Edward'],
        'Age': [24, 27, 22, 32, 29],
        'Salary': [50000, 54000, 50000, 62000, 52000]}
df = pd.DataFrame(data)

# 定义一个函数,计算薪水的总和
def total_salary(col):
    return col.sum()

# 使用 apply 函数计算薪水总和
total = df['Salary'].apply(total_salary)
print(total)

5. 使用 apply 优化性能

虽然 apply 函数非常强大和灵活,但在处理大数据集时可能会遇到性能问题。在这种情况下,考虑使用向量化操作或其他 pandas 内置函数来优化性能。

示例代码 8: 使用向量化操作替代 apply

import pandas as pd

data = {'Name': ['Alice', 'Bob', 'Charles', 'David', 'Edward'],
        'Age': [24, 27, 22, 32, 29]}
df = pd.DataFrame(data)

# 直接使用向量化操作增加年龄
df['Age'] = df['Age'] + 1
print(df)

Output:

pandas dataframe apply函数

总结

Pandas 的 apply 函数是一个非常有用的工具,可以用于多种数据处理任务。本文通过多个示例展示了如何在不同场景下使用 apply 函数,包括基本用法、行列操作、复杂数据转换、数据聚合以及性能优化。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程