欢迎这位怪蜀黍来到《Python机器学习(九十六)Pandas apply函数 - 大码王 - 博客园》

关闭页面特效

与Python中的列表类似,可以使用for循环遍历DataFrameSeries,但是这样做(尤其是在大型数据集上)非常慢。

Pandas中提供了一个高效的替代方案:apply()方法。

语法

DataFrame.apply(func)

Series.apply(func)
  • func – 要对数据集中所有元素执行的函数

下面的例子,对于DataFrame中的所有影片,评分大于8.0的标明”good”,否则标明”bad”。

首先,创建一个函数,如果评分>8.0,返回”good”,否则返回”bad”:

def rating_function(x):
    if x >= 8.0:
        return "good"
    else:
        return "bad"

现在,通过apply()把上面的函数应用到”rating”列中的所有元素:

复制代码
# 加载数据
movies_df = pd.read_csv("IMDB-Movie-Data.csv", index_col="Title")
movies_df.columns = ['rank', 'genre', 'description', 'director', 'actors', 'year', 'runtime', 
                     'rating', 'votes', 'revenue_millions', 'metascore']

# 对"rating"列,应用rating_function
movies_df["rating_category"] = movies_df["rating"].apply(rating_function)

movies_df.head(2)
复制代码

输出

                         rank                     genre  ... metascore rating_category
Title                                                    ...
Guardians of the Galaxy     1   Action,Adventure,Sci-Fi  ...      76.0            good
Prometheus                  2  Adventure,Mystery,Sci-Fi  ...      65.0             bad

[2 rows x 12 columns]

apply()方法对rating列中所有元素执行rating_function函数,然后返回一个新的Series。这个系列分配给一个名为rating_category的新列。

apply()方法中,还可以使用匿名函数。这个lambda函数实现了与rating_function相同的功能:

movies_df["rating_category"] = movies_df["rating"].apply(lambda x: 'good' if x >= 8.0 else 'bad')

movies_df.head(2)

输出

                         rank                     genre  ... metascore rating_category
Title                                                    ...
Guardians of the Galaxy     1   Action,Adventure,Sci-Fi  ...      76.0            good
Prometheus                  2  Adventure,Mystery,Sci-Fi  ...      65.0             bad

[2 rows x 12 columns]

总的来说,使用apply()要比手工遍历行快得多,因为Pandas内部使用了向量化。

向量化: 一种计算机编程风格,操作应用于整个数组而不是单个元素 – wikipedia

apply()在自然语言处理(NLP)中的高使用率就是一个很好的例子。自然语言处理(NLP)时,需要将各种文本清理功能应用于字符串,以便为机器学习做准备。

 posted on   大码王  阅读(1007)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具

成都

复制代码

喜欢请打赏

扫描二维码打赏

了解更多

点击右上角即可分享
微信分享提示