如果你曾经使用过pandas处理表格数据,你可能会熟悉导入数据、清洗和转换的过程,然后将其用作模型的输入。然而,当你需要扩展和将代码投入生产时,你的pandas管道很可能开始崩溃并运行缓慢。在这篇文章中,我将分享2个技巧,帮助你提升pandas代码的执行速度,提高数据处理效率并避免常见的陷阱。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜
在Pandas中,矢量化操作是一种高效的工具,能够以更简洁的方式处理整个数据框的列,而无需逐行循环。
广播是矢量化操作的一个关键要素,它允许您直观地操作具有不同形状的对象。
eg1: 具有3个元素的数组a与标量b相乘,得到与Source形状相同的数组。
eg2: 在进行加法运算时,将形状为(4,1)的数组a与形状为(3,)的数组b相加,结果会得到一个形状为(4,3)的数组。
已有很多文章讨论了这一点,特别是在深度学习中,大规模矩阵乘法很常见。本文将以两个简短例子进行讨论。
首先,假设您想要计算给定整数在列中出现的次数。以下是 2 种可能的方法。
"""计算DataFrame X 中 "column_1" 列中等于目标值 target 的元素个数。参数:X: DataFrame,包含要计算的列 "column_1"。target: int,目标值。返回值:int,等于目标值 target 的元素个数。"""# 使用循环计数def count_loop(X, target: int) -> int:return sum(x == target for x in X["column_1"])# 使用矢量化操作计数def count_vectorized(X, target: int) -> int:return (X["column_1"] == target).sum()
现在假设有一个DataFrame带有日期列并希望将其偏移给定的天数。使用矢量化操作计算如下:
def offset_loop(X, days: int) -> pd.DataFrame:d = pd.Timedelta(days=days)X["column_const"] = [x + d for x in X["column_10"]]return Xdef offset_vectorized(X, days: int) -> pd.DataFrame:X["column_const"] = X["column_10"] + pd.Timedelta(days=days)return X
第一个也是最直观的迭代方法是使用Python for循环。
def loop(df: pd.DataFrame, remove_col: str, words_to_remove_col: str) -> list[str]:res = []i_remove_col = df.columns.get_loc(remove_col)i_words_to_remove_col = df.columns.get_loc(words_to_remove_col)for i_row in range(df.shape[0]):res.append(remove_words(df.iat[i_row, i_remove_col], df.iat[i_row, i_words_to_remove_col]))return result
def apply(df: pd.DataFrame, remove_col: str, words_to_remove_col: str) -> list[str]:return df.apply(func=lambda x: remove_words(x[remove_col], x[words_to_remove_col]), axis=1).tolist()
在 df.apply 的每次迭代中,提供的可调用函数获取一个 Series,其索引为 df.columns,其值是行的。这意味着 pandas 必须在每个循环中生成该序列,这是昂贵的。为了降低成本,最好对您知道将使用的 df 子集调用 apply,如下所示:
def apply_only_used_cols(df: pd.DataFrame, remove_col: str, words_to_remove_col: str) -> list[str]:return df[[remove_col, words_to_remove_col]].apply(func=lambda x: remove_words(x[remove_col], x[words_to_remove_col]), axis=1)
使用itertuples与列表相结合进行迭代肯定会更好。itertuples生成带有行数据的(命名)元组。
def itertuples_only_used_cols(df: pd.DataFrame, remove_col: str, words_to_remove_col: str) -> list[str]:return [remove_words(x[0], x[1])for x in df[[remove_col, words_to_remove_col]].itertuples(index=False, name=None)]
zip接受可迭代对象并生成元组,其中第i个元组按顺序包含所有给定可迭代对象的第i个元素。
def zip_only_used_cols(df: pd.DataFrame, remove_col: str, words_to_remove_col: str) -> list[str]:return [remove_words(x, y) for x, y in zip(df[remove_col], df[words_to_remove_col])]
def to_dict_only_used_columns(df: pd.DataFrame) -> list[str]:return [remove_words(row[remove_col], row[words_to_remove_col])for row in df[[remove_col, words_to_remove_col]].to_dict(orient="records")]
除了我们讨论的迭代技术之外,另外两种方法可以帮助提高代码的性能:缓存和并行化。如果使用相同的参数多次调用 pandas 函数,缓存会特别有用。例如,如果remove_words应用于具有许多重复值的数据集,您可以使用它functools.lru_cache来存储函数的结果并避免每次都重新计算它们。要使用lru_cache,只需将@lru_cache装饰器添加到 的声明中remove_words,然后使用您首选的迭代方法将该函数应用于您的数据集。这可以显着提高代码的速度和效率。以下面的代码为例:
@lru_cachedef remove_words(...):... # Same implementation as beforedef zip_only_used_cols_cached(df: pd.DataFrame, remove_col: str, words_to_remove_col: str) -> list[str]:return [remove_words(x, y) for x, y in zip(df[remove_col], df[words_to_remove_col])]
添加此装饰器会生成一个函数,该函数会“记住”之前遇到的输入的输出,从而无需再次运行所有代码。
最后一张王牌是使用 pandarallel 跨多个独立的 df 块并行化我们的函数调用。该工具易于使用:您只需导入并初始化它,然后将所有 .applys 更改为 .parallel_applys。
from pandarallel import pandarallelpandarallel.initialize(nb_workers=min(os.cpu_count(), 12))def parapply_only_used_cols(df: pd.DataFrame, remove_col: str, words_to_remove_col: str) -> list[str]:return df[[remove_col, words_to_remove_col]].parallel_apply(lambda x: remove_words(x[remove_col], x[words_to_remove_col]), axis=1)
# 深度学习
# Python
# pandas
# for
# 循环
# 对象
# 迭代
# 矢量化
# 将其
# 应用于
# 这是
# 您的
# 如果你
# 是在
# 是一种
# 第一个
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
网络优化91478 】
【
技术知识72672 】
【
云计算0 】
【
GEO优化84317 】
【
优选文章0 】
【
营销推广36048 】
【
网络运营41350 】
【
案例网站102563 】
【
AI智能45237 】
相关推荐:
AI 播客脚本写作工具:提升内容创作效率的终极指南
AI电子书写作终极指南:ChatGPT和Canva实战教程
AI语音生成器终极指南:免费工具与逼真语音编辑
教你用AI将一篇长文自动拆解成社交媒体帖子,实现一文多发
AI QA 工程:通往人工智能质量保障工程师的职业道路
AI时代生存指南:掌握软实力,成为不可替代的人
唐库AI拆书工具如何批量导出笔记_唐库AI拆书工具批量导出与格式转换【方法】
AI简历优化指南:如何让你的简历轻松通过ATS筛选系统
唐库AI拆书工具怎么查看拆书进度_唐库AI拆书工具进度查看与异常排查【方法】
Ifor Williams拖车终极指南:农场主的选择和省税秘诀
智谱AI绘画怎么用_智谱AI绘画使用方法详细指南【教程】
AI超级英雄大乱斗:蜘蛛侠、死侍的爆笑奇幻之旅
AI数字人教程:轻松打造专属YouTube虚拟形象
利用 Gemini 1.5 Pro 进行超长视频摘要提取
通义千问怎样优化提示词合需求_通义千问需求契合技巧【步骤】
如何使用豆包 AI 练习托福雅思口语对练
2025年最佳AI流程图工具:效率提升秘籍
AI时代设计师生存指南:职业发展、技能提升与未来趋势
智行ai抢票怎么选优先车次_智行ai抢票车次优先级设置技巧【指南】
夸克AI怎样搜索医疗健康_夸克AI医疗频道与症状自查【技巧】
2025数据科学学习指南:技能、工具和学习路线图
Comet浏览器:使用ChatGPT增强您的搜索体验
ChatGPT高级图像编辑教程:黑白转换、裁剪与GIF动画制作
Roblox Studio AI 助手:创意构建与无限可能
Gemini怎样写实用型提示词_Gemini实用提示词编写【攻略】
播客数据深度分析:用户地域分布及增长策略探讨
怎么用AI帮你为初创公司进行市场定位分析?
Runway Gen-2怎么用 Runway视频生成AI使用教程
怎么用AI帮你写一份有说服力的加薪申请?
XRAI Glass:AI赋能的增强现实眼镜,对话新体验
Filmora 13 AI音乐生成器:创意视频配乐新纪元
DeepSeek网页版怎么用_DeepSeek网页版使用方法详细指南【教程】
如何利用豆包 AI 快速查询当地生活服务资讯
百度ai助手怎么取消 百度ai助手取消显示设置
ChatGPT怎么写工作汇报 职场办公效率提升与周报生成方法
AI内容检测与优化:免费工具助你提升内容质量
暖心“小艺通话”:让语障人士告别沟通困境,拥抱平等生活
使用 DeepSeek 生成符合工业标准的 API 文档
服务合同模板:起草、签署和管理指南,提升业务效率
免费AI头像生成终极指南:逼真、个性化、无水印
如何利用文心一言优化知乎高赞回答的逻辑结构
如何用AI根据职位描述(JD)定制你的求职信?
如何用ChatGPT模拟面试并优化你的求职文书?
揭秘颜值真相:社交实验的背后,你是几分?
AI网页生成工具有哪些_一键生成企业官网的AI工具推荐
Replika AI:情感慰藉还是虚拟危机?深度剖析与用户反馈
AI动画制作教程:Adobe Express一键语音转动画
AI语音生成指南:免费工具、变现实战与避坑策略
阿里通义app怎么用_阿里通义app使用方法详细指南【教程】
AI CRM集成:提升客户关系管理效率的关键
2024-01-18
南京市珐之弘网络技术有限公司专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。