标签:Python与Excel,pandas
我们之前讨论了如何在pandas中创建计算列,并讲解了一些简单的示例。通过将表达式赋值给一个新列(例如df['new column']=expression),可以在大多数情况下轻松创建计算列。然而,有时我们需要创建相当复杂的计算列,这就是本文要讲解的内容。
准备演示的数据框架
看一看下面的例子,有一个以百分比表示的学生在校平均成绩列表,我们希望将其转换为字母顺序的分数(即a、B、C、D、F等),分数阈值如下所示:
A:>=90
B:80<=且<90
C:70<=且<80
D:50<=且<70
F:<50
创建我们假设的学生和他们的学校平均数,我们将为学生的分数随机生成1到100之间的数字。
图1
创建一个辅助函数
现在,让我们创建一个取平均值的函数,并将其处理/转换为字母等级。
图2
现在我们要把这个函数应用到每个学生身上。那么,在列中对每个学生进行循环?不!记住,我们永远不应该循环遍历pandas数据框架/系列,因为如果我们有一个大的数据集,这样做效率很低。
pandas applymap()方法
pandas提供了一种将自定义函数应用于列或整个数据框架的简单方法,就是.applymap()方法,这有点类似于map()函数的作用。注意下面的代码,我们只在包含平均值的三列上应用函数。因为我们知道第一列包含字符串,如果我们尝试对字符串数据应用letter_grade()函数,可能会遇到错误。
图3
我们仍然可以使用map()函数来转换分数等级,但是,需要在三列中的每一列上分别使用map(),而applymap()能够覆盖整个数据框架(多列)。
注:本文学习整理自pythoninoffice.com。