返回

3个超实用的Pandas宝藏函数

人工智能

Pandas中的宝藏函数:轻松驾驭数据处理

大家好,我是Peter!七夕快乐呀❤️

今天,让我们一起探索Pandas中三个宝藏函数:apply()map()pipe()。这些函数是数据处理中的利器,可以帮助你轻松应对各种常见任务。

1. apply()函数

apply()函数就像一位勤劳的助手,可以对DataFrame中的每一行或每一列应用指定的函数。这个函数可以是你自己定义的,也可以是Pandas内置的。

代码示例:

import pandas as pd

# 创建一个DataFrame
df = pd.DataFrame({
    "name": ["Peter", "John", "Mary"],
    "age": [20, 25, 30]
})

# 对每一行应用一个函数
def add_10(x):
    return x + 10

df["age"] = df["age"].apply(add_10)

2. map()函数

map()函数与apply()函数类似,也可以对DataFrame中的每一行或每一列应用函数。但它有一个限制,只能应用Pandas内置的函数。

代码示例:

# 对每一行应用一个函数
df["age"] = df["age"].map(lambda x: x + 10)

3. pipe()函数

pipe()函数就像一条神奇的管道,可以将DataFrame作为输入,传递给指定的函数。这个函数可以是你自己定义的,也可以是Pandas内置的。

代码示例:

# 对每一行应用一个函数
df.pipe(lambda x: x["age"] + 10)

实战案例

让我们通过一个实战案例来展示这三个函数的威力。假设我们有一个包含学生成绩的DataFrame:

df = pd.DataFrame({
    "name": ["Peter", "John", "Mary"],
    "math": [90, 80, 70],
    "science": [85, 90, 75],
    "english": [80, 85, 90]
})

任务:

  • 求出每门课程的平均分
  • 求出每门课程的最高分和最低分
  • 计算每位学生的总分和平均分

解决方案:

1. 求出每门课程的平均分

# 使用apply()函数
df["math_mean"] = df["math"].apply(lambda x: x.mean())

# 使用map()函数
df["math_mean"] = df["math"].map(lambda x: x.mean())

# 使用pipe()函数
df["math_mean"] = df["math"].pipe(lambda x: x.mean())

2. 求出每门课程的最高分和最低分

# 使用apply()函数
df["math_max"] = df["math"].apply(lambda x: x.max())
df["math_min"] = df["math"].apply(lambda x: x.min())

# 使用map()函数
df["math_max"] = df["math"].map(lambda x: x.max())
df["math_min"] = df["math"].map(lambda x: x.min())

# 使用pipe()函数
df["math_max"] = df["math"].pipe(lambda x: x.max())
df["math_min"] = df["math"].pipe(lambda x: x.min())

3. 计算每位学生的总分和平均分

# 使用apply()函数
df["total"] = df[["math", "science", "english"]].apply(lambda x: x.sum(), axis=1)
df["average"] = df[["math", "science", "english"]].apply(lambda x: x.mean(), axis=1)

# 使用map()函数
df["total"] = df[["math", "science", "english"]].map(lambda x: x.sum(), axis=1)
df["average"] = df[["math", "science", "english"]].map(lambda x: x.mean(), axis=1)

# 使用pipe()函数
df["total"] = df[["math", "science", "english"]].pipe(lambda x: x.sum(), axis=1)
df["average"] = df[["math", "science", "english"]].pipe(lambda x: x.mean(), axis=1)

结果:

print(df)

   name  math  science  english  math_mean  science_mean  english_mean  math_max  math_min  science_max  science_min  english_max  english_min  total  average
0  Peter    90       85       80       90.0        85.0         80.0         90          90           85            85           90            80       255    85.0
1   John    80       90       85       80.0        90.0         85.0         90          80           90            85           90            80       255    85.0
2   Mary    70       75       90       70.0        75.0         90.0         90          70           75            75           90            70       235    78.3

总结

apply()map()pipe()函数是Pandas中不可或缺的宝藏函数。它们可以帮助你轻松处理DataFrame中的数据,实现各种常见任务,如求平均值、最高值和最低值、计算总分和平均分等。熟练掌握这些函数将大大提升你的Pandas数据处理技能。

常见问题解答

  1. 这三个函数有什么区别?

    • apply()函数可以应用任何函数,包括自定义函数。
    • map()函数只能应用Pandas内置的函数。
    • pipe()函数将DataFrame作为管道传递给函数,并返回函数的输出。
  2. 哪种函数最适合我的任务?

    • 如果需要应用自定义函数,则使用apply()函数。
    • 如果需要应用Pandas内置的函数,则可以根据个人喜好选择apply()函数或map()函数。
    • 如果需要将DataFrame作为管道传递给函数,则使用pipe()函数。
  3. 这些函数如何提高我的数据处理效率?

    • 这些函数可以避免手动遍历DataFrame的麻烦,使代码更简洁、更易读。
    • 它们可以并行处理数据,提高处理速度。
  4. 这些函数有什么局限性?

    • apply()函数对自定义函数的执行效率较低。
    • map()函数只能应用Pandas内置的函数。
  5. 有哪些替代这些函数的方法?

    • 除了这些函数之外,还可以使用NumPy的vectorize()函数或lambda表达式。