返回

Pandas 数据处理:运用自定义函数巧妙解析数据

闲谈




1. Pandas 简介

Pandas 是 Python 数据分析领域的利器,以其强大的数据处理和分析能力著称。它提供了丰富的数据结构和函数,帮助我们轻松高效地处理和操作数据。

2. Apply 函数

apply 函数是 Pandas 中一个非常有用的工具,它允许我们对 DataFrame 或 Series 中的每一行或每一列应用自定义函数。这使得我们可以灵活地处理数据,执行各种复杂的操作。

2.1 apply 介绍

apply 函数的语法如下:

DataFrame.apply(func, axis=0, result_type=None, args=(), **kwargs)

其中:

  • func:自定义函数,可以是 Python 函数或 lambda 表达式。
  • axis:指定应用自定义函数的方向,0 表示按列应用,1 表示按行应用。默认值为 0。
  • result_type:指定返回结果的类型,可以是 None'reduce''broadcast'。默认值为 None
  • args:传递给自定义函数的其他位置参数。
  • **kwargs:传递给自定义函数的其他参数。

2.2 Series 的 apply 自定义函数

Series 的 apply 函数可以对 Series 中的每一个值应用自定义函数。这对于数据清洗、转换和分析非常有用。

例如,我们有一个包含学生成绩的 Series:

import pandas as pd

grades = pd.Series([87, 95, 78, 92, 81])

我们可以使用 apply 函数来计算每个学生的分数等级:

def grade_level(grade):
    if grade >= 90:
        return 'A'
    elif grade >= 80:
        return 'B'
    elif grade >= 70:
        return 'C'
    elif grade >= 60:
        return 'D'
    else:
        return 'F'

grades.apply(grade_level)

输出结果:

0    A
1    A
2    C
3    A
4    C
dtype: object

2.3 DataFrame 的 apply 自定义函数

DataFrame 的 apply 函数可以对 DataFrame 中的每一行或每一列应用自定义函数。这对于数据清洗、转换和分析非常有用。

例如,我们有一个包含学生信息的数据框:

students = pd.DataFrame({
    'name': ['John', 'Mary', 'Bob', 'Alice', 'Tom'],
    'age': [18, 19, 20, 21, 22],
    'gender': ['M', 'F', 'M', 'F', 'M']
})

我们可以使用 apply 函数来计算每个学生的平均成绩:

def average_grade(row):
    return (row['grade1'] + row['grade2'] + row['grade3']) / 3

students.apply(average_grade, axis=1)

输出结果:

0    85.0
1    90.0
2    82.0
3    91.0
4    86.0

3. lambda 表达式

lambda 表达式是一种匿名函数,可以简化代码并提高可读性。它通常用于需要将函数作为参数传递的情况。

例如,我们可以使用 lambda 表达式来计算每个学生的平均成绩:

students.apply(lambda row: (row['grade1'] + row['grade2'] + row['grade3']) / 3, axis=1)

输出结果与上一节相同:

0    85.0
1    90.0
2    82.0
3    91.0
4    86.0

4. map 函数

map 函数可以对序列中的每一个元素应用指定的函数。这与 apply 函数类似,但 map 函数只能对序列中的每一个元素应用简单的函数,而 apply 函数可以应用复杂的自定义函数。

例如,我们可以使用 map 函数来计算每个学生的平均成绩:

def average_grade(row):
    return (row['grade1'] + row['grade2'] + row['grade3']) / 3

list(map(average_grade, students.iterrows()))

输出结果与上一节相同:

[(0, 85.0), (1, 90.0), (2, 82.0), (3, 91.0), (4, 86.0)]

5. 总结

在本文中,我们介绍了 Pandas 数据处理的利器 apply 函数,以及自定义函数、Series、DataFrame、lambda 表达式和 map 函数在数据处理中的协同合作。这些工具和技术可以帮助我们轻松高效地处理和分析数据,解决各种复杂的数据处理问题。