AI的提示词专栏:Prompt 与 Python Pandas 的结合使用指南

AI的提示词专栏:Prompt 与 Python Pandas 的结合使用指南
在这里插入图片描述


在这里插入图片描述
在这里插入图片描述

AI的提示词专栏:Prompt 与 Python Pandas 的结合使用指南

该指南聚焦 Prompt 与 Pandas 结合的实践应用,先阐述二者结合的价值 —— 降低 Pandas 学习门槛、提升数据处理效率,接着梳理代码生成、解释、优化等 6 大核心应用场景及对应 Prompt 目标。随后详解高质量 Prompt 设计的五大原则,强调需精准描述数据结构、明确操作目标等要点。通过 5 个实战案例,从基础数据清洗到批量生成报表,展示 Prompt 设计、模型输出与结果验证全流程,并给出 8 个高频问题的解决方案。最后总结核心价值,提供扩展学习建议,助力读者掌握 “自然语言驱动数据处理” 能力,形成高效工作流。
在这里插入图片描述

人工智能专栏介绍

    人工智能学习合集专栏是 AI 学习者的实用工具。它像一个全面的 AI 知识库,把提示词设计、AI 创作、智能绘图等多个细分领域的知识整合起来。无论你是刚接触 AI 的新手,还是有一定基础想提升的人,都能在这里找到合适的内容。从最基础的工具操作方法,到背后深层的技术原理,专栏都有讲解,还搭配了实例教程和实战案例。这些内容能帮助学习者一步步搭建完整的 AI 知识体系,让大家快速从入门进步到精通,更好地应对学习和工作中遇到的 AI 相关问题。

在这里插入图片描述

    这个系列专栏能教会人们很多实用的 AI 技能。在提示词方面,能让人学会设计精准的提示词,用不同行业的模板高效和 AI 沟通。写作上,掌握从选题到成稿的全流程技巧,用 AI 辅助写出高质量文本。编程时,借助 AI 完成代码编写、调试等工作,提升开发速度。绘图领域,学会用 AI 生成符合需求的设计图和图表。此外,还能了解主流 AI 工具的用法,学会搭建简单智能体,掌握大模型的部署和应用开发等技能,覆盖多个场景,满足不同学习者的需求。

在这里插入图片描述

在这里插入图片描述

1️⃣ ⚡ 点击进入 AI 的提示词专栏,专栏拆解提示词底层逻辑,从明确指令到场景化描述,教你精准传递需求。还附带包含各行业适配模板:医疗问诊话术、电商文案指令等,附优化技巧,让 AI 输出更贴合预期,提升工作效率。

2️⃣ ⚡ 点击进入 AI 灵感写作专栏,AI 灵感写作专栏,从选题到成稿,全流程解析 AI 写作技巧。涵盖论文框架搭建、小说情节生成等,教你用提示词引导 AI 输出内容,再进行人工润色。附不同文体案例,助你解决写作卡壳,产出高质量文本。

3️⃣ ⚡ 点击进入 AI 辅助编程专栏,AI 辅助编程专栏,通过实例教你用 AI 写代码:从功能描述到调试优化。涵盖前端、后端、数据库等,语言包括HTML5、VUE、Python、Java、C# 等语言,含算法实现、Bug 修复技巧,帮开发者减少重复劳动,专注核心逻辑,提升开发速度。

4️⃣ ⚡ 点击进入 AI 精准绘图专栏,AI 精准绘图,聚焦 AI 绘图在设计场景的落地。详解如何描述风格、元素、用途,生成 logo、商标等。含 Midjourney 等工具参数设置,及修改迭代方法,帮设计新手快速出图,满足商业与个人需求。

5️⃣ ⚡ 点击进入 AI 绘制图表专栏,AI 绘制图表专栏,教你用 AI 工具将数据转化为直观图表。涵盖曲线图数据输入、流程图逻辑梳理等,附 Excel 联动、格式美化技巧,适合学生、职场人快速制作专业图表,提升数据展示效果。

6️⃣ ⚡ 点击进入 AI 的工具集专栏,AI 的工具集专栏,盘点主流 AI 工具:ChatGPT、DeepSeek、 Claude、Gemini、Copilot 等。解析各工具优势,附使用场景与技巧,帮你根据需求选工具,快速上手提升效率,覆盖办公、创作、开发等场景。

7️⃣ ⚡ 点击进入 AI 的智能体专栏,AI 的智能体专栏,解析智能体自主运行原理,包括任务拆解、环境交互等。教你用大模型搭建简单智能体,附多智能体协作案例,适合想探索 AI 自主系统的开发者入门。

8️⃣ ⚡ 点击进入 AI 的大模型专栏,AI 的大模型专栏,详解大模型部署步骤,从本地搭建到云端部署。含 API 调用教程、应用开发案例,教你将大模型集成到项目,掌握企业级 AI 应用开发技能,应对实际业务需求。

一、章节引言:为什么要将 Prompt 与 Pandas 结合?

在数据处理领域,Python Pandas 库凭借其强大的数据结构(如 DataFrame)和丰富的函数,成为数据分析师、数据科学家的必备工具。然而,即使是熟练的使用者,在面对复杂数据需求时,也可能需要花费大量时间查阅文档、调试代码——比如复杂的多表合并逻辑、自定义数据清洗规则、动态生成统计指标等。

而 Prompt(提示词)的出现,为 Pandas 使用提供了“智能辅助”能力:通过精准的自然语言描述,让大语言模型(如 ChatGPT、Claude)生成符合需求的 Pandas 代码、解释代码逻辑、优化低效语句,甚至排查代码报错。这种结合不仅能降低 Pandas 的学习门槛(尤其对初学者),还能提升资深使用者的工作效率,让数据处理从“手动编码”向“需求驱动+智能生成”转变。

本章将从基础到进阶,系统讲解 Prompt 与 Pandas 结合的核心场景、设计技巧、实战案例,帮助读者掌握“用自然语言驱动数据处理”的能力。

二、基础认知:Prompt 辅助 Pandas 的核心场景

在开始设计 Prompt 前,首先需要明确:哪些 Pandas 操作适合用 Prompt 辅助?不同场景下,Prompt 的侧重点有何不同?下表梳理了 6 个核心应用场景及对应的 Prompt 目标:

应用场景场景描述Prompt 核心目标适用人群
代码生成已知数据需求(如“按日期分组计算销售额均值”),但不确定 Pandas 函数或语法让模型生成可直接运行的 Pandas 代码,包含数据读取、处理、输出步骤初学者、非技术背景的数据使用者
代码解释拿到一段现成的 Pandas 代码(如团队同事分享、网上查找),但不理解部分逻辑(如 mergehow 参数、groupbyagg 用法)让模型逐行解释代码功能、关键参数含义、数据流转过程,并用通俗语言说明初学者、需要快速理解陌生代码的使用者
代码优化现有 Pandas 代码运行缓慢(如处理百万级数据时循环耗时)、逻辑冗余,希望提升效率或简洁度让模型识别代码瓶颈(如循环替代、索引优化),生成优化后的代码,并说明优化原理有基础的使用者、需要处理大规模数据的分析师
报错排查运行 Pandas 代码时出现报错(如 KeyErrorValueError),无法快速定位原因让模型根据报错信息+代码片段,分析报错根源(如列名错误、数据类型不匹配),并提供修改方案所有使用者(尤其调试时)
需求转化需求是模糊的自然语言(如“帮我看看这个数据集里哪些用户的消费行为异常”),需要先拆解为清晰的 Pandas 操作步骤让模型先将模糊需求拆解为可执行的数据分析步骤(如“1. 定义异常规则;2. 筛选异常数据;3. 统计异常比例”),再生成对应代码业务人员、需要将业务需求转化为技术操作的分析师
批量任务自动化需要重复执行相似但参数不同的 Pandas 任务(如“每周一生成上周各地区的 5 个核心指标报表”)让模型生成带参数化、循环或函数封装的 Pandas 代码,支持批量处理或定时执行需要自动化报表、批量数据处理的使用者

三、核心技巧:设计高质量 Pandas 辅助 Prompt 的 5 个原则

要让大语言模型精准理解 Pandas 需求并输出有效结果,Prompt 设计需遵循“精准、完整、具体、结构化、场景化”五大原则。每个原则对应明确的操作方法和案例,避免模型因信息模糊而生成无用代码。

原则 1:精准描述数据结构——让模型“知道数据长什么样”

模型无法直接查看你的数据集,因此 Prompt 中必须包含数据结构信息(如列名、数据类型、样本数据),否则生成的代码可能因“列名不匹配”“数据类型错误”而无法运行。

错误示例(信息缺失):
帮我写一段 Pandas 代码,计算每个用户的平均消费金额。 

→ 问题:模型不知道“用户列名”(是 user_id 还是 用户名?)、“消费金额列名”(是 amount 还是 消费额?),生成的代码大概率需要修改。

正确示例(信息完整):
我有一个 CSV 数据集,路径为 ./sales_data.csv,数据结构如下: - 列名1:user_id(数据类型:字符串,用户唯一标识) - 列名2:order_date(数据类型:字符串,格式为"2024-05-01",订单日期) - 列名3:amount(数据类型:浮点数,订单金额,单位:元) - 列名4:product_category(数据类型:字符串,商品类别,如"家电""服装") 请写一段 Pandas 代码,读取该 CSV 文件,计算每个 user_id 的平均 amount(命名为 avg_consume),并将结果按 avg_consume 降序排序,最后保存为 ./user_avg_consume.csv。 

→ 优势:模型明确知道数据的列名、类型、路径,生成的代码可直接运行,无需二次修改。

原则 2:明确操作目标与输出格式——让模型“知道要做什么、输出什么”

除了数据结构,还需清晰说明**“要完成的具体操作”** 和**“最终输出的格式/位置”**,避免模型生成“半成品”代码。

示例(含操作目标与输出格式):
我有一个 Pandas DataFrame 名为 df,结构如下: - 列名:date(日期,datetime 类型,格式"2024-01-01")、region(地区,如"华北""华东")、sales(销售额,整数) 请写一段 Pandas 代码,完成以下操作: 1. 筛选出 2024 年 3 月(date 介于 2024-03-01 至 2024-03-31)的所有数据; 2. 按 region 分组,计算每组的 sales 总和(命名为 total_sales)、销售记录数(命名为 order_count); 3. 将分组结果转换为新的 DataFrame,列名依次为 region、total_sales、order_count; 4. 给新 DataFrame 添加一列"avg_order_value",计算方式为 total_sales / order_count(保留 2 位小数); 5. 将最终结果保存为 Excel 文件,路径为 ./202403_region_sales.xlsx,sheet 名为"地区销售统计"。 

→ 优势:步骤清晰、目标明确,模型生成的代码会严格覆盖所有操作,无需使用者补充逻辑。

原则 3:结合场景补充业务规则——让模型“理解为什么这么做”

当操作涉及业务逻辑(如“异常值定义”“指标计算规则”)时,必须在 Prompt 中补充业务背景,否则模型可能按默认逻辑处理,不符合实际需求。

示例(含业务规则):
我是电商平台的数据分析师,有一个用户购买行为 DataFrame df,结构如下: - user_id:用户ID(字符串) - login_time:登录时间(datetime 类型) - purchase_time:购买时间(datetime 类型,若未购买则为 NaT) - purchase_amount:购买金额(浮点数,未购买则为 NaN) 业务规则: 1. "活跃用户"定义:login_time 在 2024-05-01 至 2024-05-31 期间,且至少登录 2 次的用户; 2. "购买转化率"计算:活跃用户中,purchase_time 不为 NaT 的用户数 / 活跃用户总数(保留 4 位小数,转换为百分比格式,如"25.36%"); 3. "客单价"计算:活跃用户的 purchase_amount 总和 / 活跃用户中购买用户数(保留 2 位小数)。 请写一段 Pandas 代码: 1. 筛选出 2024 年 5 月的活跃用户(按业务规则 1); 2. 计算 5 月的购买转化率和客单价(按业务规则 2、3); 3. 用 print 语句输出结果,格式为:"2024年5月活跃用户数:X人,购买转化率:Y,客单价:Z元"。 

→ 优势:模型理解“活跃用户”“转化率”的业务定义,生成的指标计算逻辑完全符合实际业务需求,避免数据偏差。

原则 4:针对复杂需求拆分步骤——让模型“逐步解决问题”

对于多步骤、逻辑复杂的需求(如多表合并+条件筛选+自定义函数应用),直接写“一句话需求”容易导致模型遗漏步骤。此时应在 Prompt 中拆分操作步骤,引导模型逐步处理。

示例(拆分复杂需求):
我有两个 Pandas DataFrame,分别为 df_orders(订单数据)和 df_users(用户数据),结构如下: df_orders: - order_id(订单ID,字符串) - user_id(用户ID,字符串) - order_date(订单日期,datetime 类型) - product_id(商品ID,字符串) - quantity(购买数量,整数) - unit_price(单价,浮点数) df_users: - user_id(用户ID,字符串) - user_level(用户等级,字符串,值为"普通""会员""VIP") - register_date(注册日期,datetime 类型) 需求:计算 2024 年 4 月各用户等级的“总销售额”和“平均订单金额”,步骤如下: 1. 先给 df_orders 添加一列"total_price",计算方式为 quantity * unit_price; 2. 筛选 df_orders 中 order_date 在 2024-04-01 至 2024-04-30 期间的订单; 3. 将筛选后的 df_orders 与 df_users 按 user_id 进行内连接(inner join),保留所有列; 4. 按 user_level 分组,计算每组的 total_price 总和(命名为 total_sales)、订单数(命名为 order_count); 5. 计算每组的平均订单金额(命名为 avg_order_price),公式为 total_sales / order_count(保留 2 位小数); 6. 最终结果按 total_sales 降序排序,保存为 CSV 文件 ./202404_user_level_sales.csv。 请写一段 Pandas 代码,严格按上述步骤执行,并在代码中添加注释说明每个步骤。 

→ 优势:复杂需求拆分为可执行的小步骤,模型不易遗漏逻辑,且代码会包含注释,便于使用者理解和调试。

原则 5:报错排查需提供“代码+报错信息”——让模型“精准定位问题”

当遇到 Pandas 代码报错时,Prompt 必须包含完整的代码片段报错信息(含Traceback),否则模型无法判断报错原因(如“KeyError”可能是列名错误,也可能是索引问题)。

示例(报错排查):
我运行以下 Pandas 代码时出现报错,请帮我分析原因并修改代码: 【代码片段】 import pandas as pd # 读取数据 df = pd.read_csv("./user_purchase.csv") # 按用户等级分组计算平均消费 df_grouped = df.groupby("user_level")["consume_amount"].mean() # 筛选平均消费大于 1000 的用户等级 result = df_grouped[df_grouped > 1000] # 输出结果 print(result) 【报错信息】 KeyError: 'user_level' Traceback (most recent call last): File "C:\Users\Test\data_analysis.py", line 8, in <module> df_grouped = df.groupby("user_level")["consume_amount"].mean() File "D:\Anaconda3\lib\site-packages\pandas\core\frame.py", line 8402, in groupby return DataFrameGroupBy( File "D:\Anaconda3\lib\site-packages\pandas\core\groupby\groupby.py", line 935, in __init__ obj._get_axis(axis), File "D:\Anaconda3\lib\site-packages\pandas\core\generic.py", line 550, in _get_axis return getattr(self, f"_{name}") File "D:\Anaconda3\lib\site-packages\pandas\core\generic.py", line 591, in __getattr__ return object.__getattribute__(self, name) AttributeError: 'DataFrame' object has no attribute '_user_level' 请分析:1. 报错的根本原因;2. 修改后的完整代码;3. 预防此类错误的建议。 

→ 优势:模型可通过“KeyError: ‘user_level’”和代码中的 groupby("user_level"),快速判断“数据集不存在 user_level 列”,进而给出修改方案(如检查列名、添加列名修正代码)。

四、实战案例:不同场景下的 Prompt 与 Pandas 结合示例

本节通过 5 个高频实战案例,展示 Prompt 设计、模型输出、结果验证的完整流程,覆盖“代码生成、代码优化、报错排查、需求转化、批量自动化”五大场景,读者可直接复用 Prompt 模板。

案例 1:基础数据清洗——代码生成场景

需求背景:

有一份电商订单 CSV 数据(./orders.csv),存在“缺失值”“异常值”“日期格式不统一”问题,需要用 Pandas 清洗数据。

Prompt 设计:
我有一份电商订单 CSV 数据,路径为 ./orders.csv,数据结构如下: - 列名1:order_id(订单ID,字符串,无缺失) - 列名2:order_date(订单日期,字符串,格式有"2024/5/1"和"2024-05-01"两种,无缺失) - 列名3:user_id(用户ID,字符串,约 5% 为缺失值 NaN) - 列名4:amount(订单金额,浮点数,存在缺失值 NaN,且有异常值(如负数、超过 100000 的值)) - 列名5:payment_method(支付方式,字符串,值为"微信""支付宝""银联",无缺失) 请写一段 Pandas 代码,完成以下数据清洗操作: 1. 读取 CSV 文件,查看前 5 行数据和数据基本信息(用 info() 和 describe()); 2. 处理 order_date 列:将所有日期统一转换为 datetime 类型(格式为"YYYY-MM-DD"); 3. 处理 user_id 列:缺失值用"未知用户"填充; 4. 处理 amount 列: a. 缺失值用该列的中位数填充(保留 2 位小数); b. 删除 amount < 0 或 amount > 100000 的异常订单(整行删除); 5. 清洗完成后,查看清洗后的数据基本信息(info()、describe()),确认无异常; 6. 将清洗后的数据保存为 ./cleaned_orders.csv,不保留索引列。 要求:1. 代码中添加详细注释;2. 说明每一步清洗的目的;3. 若涉及计算(如中位数),需动态获取(不写死数值)。 
模型输出(ChatGPT 4 为例):
import pandas as pd import numpy as np # 步骤1:读取数据并查看基础信息# 目的:了解原始数据的结构、数据类型、缺失值情况,为后续清洗做准备 df = pd.read_csv("./orders.csv")print("=== 原始数据前5行 ===")print(df.head())print("\n=== 原始数据基本信息 ===")print(df.info())print("\n=== 原始数据统计描述 ===")print(df.describe())# 步骤2:统一 order_date 列的日期格式为 datetime 类型# 目的:标准化日期格式,便于后续按日期筛选、分组等操作# pd.to_datetime 可自动识别多种日期格式,errors="coerce"确保异常格式转为NaT(此处需求无缺失,暂用) df["order_date"]= pd.to_datetime(df["order_date"],format=None, errors="coerce")# 格式化为"YYYY-MM-DD"字符串(若需保留datetime类型,可跳过此步,直接用datetime类型后续操作) df["order_date"]= df["order_date"].dt.strftime("%Y-%m-%d")print("\n=== order_date 列格式转换后前5行 ===")print(df[["order_id","order_date"]].head())# 步骤3:填充 user_id 列的缺失值# 目的:避免缺失值影响后续用户相关的分组统计(如按user_id计算消费总额) df["user_id"]= df["user_id"].fillna("未知用户")print("\n=== user_id 列缺失值填充后,缺失值数量 ===")print(df["user_id"].isnull().sum())# 验证填充效果,应为0# 步骤4:处理 amount 列的缺失值和异常值# 4.1 用中位数填充缺失值(中位数比均值更抗异常值影响,适合金额类数据) amount_median =round(df["amount"].median(),2)# 计算中位数并保留2位小数 df["amount"]= df["amount"].fillna(amount_median)print(f"\n=== amount 列缺失值用中位数({amount_median})填充后,缺失值数量 ===")print(df["amount"].isnull().sum())# 验证填充效果,应为0# 4.2 删除 amount 异常值(<0 或 >100000)# 先查看异常值数量,了解数据质量 abnormal_count =len(df[(df["amount"]<0)|(df["amount"]>100000)])print(f"\n=== 待删除的 amount 异常值数量 ===")print(abnormal_count)# 删除异常值行 df_cleaned = df[(df["amount"]>=0)&(df["amount"]<=100000)]print(f"\n=== 清洗前数据行数:{len(df)},清洗后数据行数:{len(df_cleaned)} ===")print(f"=== 删除的异常行数量:{len(df)-len(df_cleaned)} ===")# 步骤5:查看清洗后数据的基本信息,验证清洗效果print("\n=== 清洗后数据基本信息 ===")print(df_cleaned.info())print("\n=== 清洗后数据统计描述 ===")print(df_cleaned.describe())# 步骤6:保存清洗后的数据,不保留索引列 df_cleaned.to_csv("./cleaned_orders.csv", index=False)print("\n=== 数据清洗完成,已保存至 ./cleaned_orders.csv ===")
结果验证:
  1. 运行代码后,查看 ./cleaned_orders.csv,确认:
    • order_date 格式统一为“YYYY-MM-DD”;
    • user_id 无 NaN,缺失值变为“未知用户”;
    • amount 无 NaN,无负数和超过 100000 的值;
  2. 代码中的 print 语句可验证每一步效果(如缺失值数量、异常值数量),便于调试。

案例 2:大规模数据处理——代码优化场景

需求背景:

现有一份 500 万行的用户行为日志 DataFrame(df_logs),需按“用户ID+日期”分组计算访问次数,但当前代码用 for 循环实现,运行耗时超过 10 分钟,需用 Prompt 优化。

Prompt 设计:
我有一份 500 万行的用户行为日志 Pandas DataFrame(df_logs),结构如下: - user_id:用户ID(字符串,约 100 万个唯一值) - log_time:行为时间(datetime 类型,格式"2024-05-01 14:30:00") - action_type:行为类型(字符串,如"访问""点击""购买") 当前代码用 for 循环计算“每个用户每天的访问次数”,代码如下: ```python import pandas as pd import time # 假设 df_logs 已读取(500万行) start_time = time.time() # 提取日期列 df_logs["date"] = df_logs["log_time"].dt.date # 初始化结果字典 result_dict = {} # 循环遍历每一行,统计访问次数 for _, row in df_logs.iterrows(): user = row["user_id"] date = row["date"] action = row["action_type"] if action == "访问": key = (user, date) if key in result_dict: result_dict[key] += 1 else: result_dict[key] = 1 # 转换为 DataFrame df_result = pd.DataFrame(list(result_dict.items()), columns=["user_date", "visit_count"]) df_result[["user_id", "date"]] = pd.DataFrame(df_result["user_date"].tolist(), index=df_result.index) df_result = df_result[["user_id", "date", "visit_count"]] end_time = time.time() print(f"运行耗时:{end_time - start_time:.2f} 秒") # 实际运行耗时约 650 秒(10分钟+) 

问题:代码用 iterrows() 循环遍历,效率极低,处理 500 万行数据耗时过长。

请帮我:1. 分析当前代码效率低的原因;2. 用 Pandas 内置函数(如 groupby)优化代码,确保功能不变;3. 对比优化前后的效率差异(预估耗时);4. 给出大规模数据处理的 Pandas 优化建议。

 #### 模型输出(Claude 3 为例): ```python import pandas as pd import time # 假设 df_logs 已读取(500万行) start_time = time.time() # 优化后的代码 # 1. 分析原代码低效原因: # - iterrows() 是逐行遍历,Pandas 对此类操作优化极差,时间复杂度为 O(n) 且常数项大; # - 字典存储中间结果,需频繁判断键是否存在,进一步增加耗时; # - 最后转换为 DataFrame 时需拆分元组,额外消耗资源。 # 2. 优化思路:用 Pandas 向量化操作(boolean indexing)+ groupby,时间复杂度降至 O(n) 且常数项极小 # 步骤1:筛选“访问”类型的行为(向量化操作,比循环判断快 100+ 倍) df_visit = df_logs[df_logs["action_type"] == "访问"].copy() # 步骤2:提取日期列(向量化操作,无需循环) df_visit["date"] = df_visit["log_time"].dt.date # 或 dt.strftime("%Y-%m-%d") 转为字符串格式 # 步骤3:按 user_id 和 date 分组,计算次数(groupby 是 Pandas 优化后的操作,底层用 C 实现) df_result = df_visit.groupby(["user_id", "date"]).size().reset_index(name="visit_count") # 步骤4:调整列顺序(确保与原代码输出一致) df_result = df_result[["user_id", "date", "visit_count"]] end_time = time.time() print(f"优化后运行耗时:{end_time - start_time:.2f} 秒") # 预估处理 500 万行数据耗时约 5-10 秒(效率提升 60-130 倍) # 3. 大规模数据处理的 Pandas 优化建议: # - 避免使用 iterrows()/itertuples() 逐行遍历,优先用向量化操作(如 boolean indexing、apply(谨慎用)、groupby); # - 对超大 DataFrame(1000万行+),可使用 dtype 优化(如将字符串列转为 category 类型,减少内存占用): # df_logs["action_type"] = df_logs["action_type"].astype("category") # - 若内存不足,可使用 chunksize 分块读取数据(pd.read_csv(chunksize=100000)),逐块处理后合并结果; # - 对重复执行的操作,优先用 Pandas 内置函数(如 size()/count()),避免自定义函数(如 lambda); # - 考虑使用 Dask/PySpark 等分布式计算框架,处理亿级以上数据(Pandas 单进程处理有瓶颈)。 
结果验证:
  1. 功能验证:对比优化前后的 df_result,确认“用户ID+日期”的访问次数统计结果一致;
  2. 效率验证:优化后代码运行耗时从 650 秒降至 8 秒左右,效率提升约 80 倍,符合预期。

案例 3:多表合并与计算——需求转化场景

需求背景:

业务人员提出模糊需求:“想知道每个商品类别的‘复购率’,复购指用户在购买该类别商品后 30 天内再次购买同一类别”,需将该需求转化为 Pandas 操作并生成代码。

Prompt 设计:
我是电商数据分析师,业务人员提出以下需求: “想知道 2024 年 1-4 月每个商品类别的复购率,复购定义为:用户购买某类别商品后,30 天内再次购买该类别的商品(第一次购买不算复购,第二次及以后算)。例如:用户 A 3月1日买了家电,3月20日又买了家电,算 1 次复购;若 4月20日再买家电,因距离上次购买超过 30 天,不算复购。” 现有两个 DataFrame: 1. df_orders(订单数据): - order_id(订单ID,字符串) - user_id(用户ID,字符串) - order_date(订单日期,datetime 类型) - product_id(商品ID,字符串) - quantity(购买数量,整数) 2. df_products(商品数据): - product_id(商品ID,字符串) - category(商品类别,字符串,如"家电""服装""食品") 请帮我:1. 将业务需求拆分为可执行的 Pandas 操作步骤;2. 生成对应的 Pandas 代码,包含详细注释;3. 最终输出“商品类别”“购买用户数”“复购用户数”“复购率”(复购用户数/购买用户数,保留 4 位小数)的 DataFrame,并按复购率降序排序。 
模型输出(Gemini Pro 为例):
import pandas as pd import numpy as np # 一、需求拆分步骤(对应代码逻辑):# 1. 合并订单数据与商品数据,关联商品类别(order_id → product_id → category);# 2. 筛选 2024 年 1-4 月的订单(按 order_date 过滤);# 3. 按“用户ID+商品类别”分组,获取每个用户在每个类别的所有购买日期,并按日期排序;# 4. 计算每个用户在每个类别的“相邻购买日期差”(后一次购买日期 - 前一次购买日期);# 5. 判断是否满足复购条件:相邻日期差 ≤ 30 天,若有则该用户在该类别为“复购用户”;# 6. 按商品类别汇总:购买用户数(去重)、复购用户数(去重);# 7. 计算复购率 = 复购用户数 / 购买用户数,整理输出结果。# 二、具体代码实现# 步骤1:合并订单数据与商品数据(按 product_id 内连接,确保每个订单都有商品类别) df_merged = pd.merge( left=df_orders, right=df_products, on="product_id", how="inner"# 只保留有商品类别的订单)print("=== 合并后数据前5行 ===")print(df_merged[["order_id","user_id","order_date","product_id","category"]].head())# 步骤2:筛选 2024 年 1-4 月的订单 df_merged["year_month"]= df_merged["order_date"].dt.to_period("M")# 提取年月,便于筛选 df_filtered = df_merged[df_merged["year_month"].between("2024-01","2024-04")].copy()print(f"\n=== 2024年1-4月订单数量:{len(df_filtered)} ===")# 步骤3:按“user_id + category”分组,获取每个用户-类别组合的购买日期列表,并排序defget_sorted_dates(group):# 对每个用户-类别的订单,按日期升序排序,返回日期列表return group["order_date"].sort_values().tolist()# 分组并应用函数,得到每个用户-类别的日期列表 user_category_dates = df_filtered.groupby(["user_id","category"]).apply(get_sorted_dates, include_groups=False).reset_index(name="purchase_dates")print("\n=== 每个用户-类别的购买日期列表(前5行) ===")print(user_category_dates.head())# 步骤4:计算相邻购买日期差,判断是否有复购defcheck_repurchase(dates):# 输入:排序后的购买日期列表;输出:是否为复购用户(True/False)iflen(dates)<2:# 购买次数 <2 次,无法复购returnFalse# 计算相邻日期差(单位:天) date_diffs =[dates[i]- dates[i-1]for i inrange(1,len(dates))] date_diffs_days =[diff.days for diff in date_diffs]# 判断是否有任意一次相邻差 ≤30 天returnany(diff <=30for diff in date_diffs_days)# 应用函数,标记每个用户-类别是否为复购用户 user_category_dates["is_repurchase_user"]= user_category_dates["purchase_dates"].apply(check_repurchase)print("\n=== 标记复购用户后(前5行) ===")print(user_category_dates[["user_id","category","is_repurchase_user"]].head())# 步骤5:按 category 分组,计算核心指标 category_metrics = user_category_dates.groupby("category").agg( 购买用户数=("user_id","nunique"),# 每个类别的购买用户数(去重) 复购用户数=("is_repurchase_user",lambda x: x.sum())# 复购用户数(True=1,False=0,求和即数量)).reset_index()# 步骤6:计算复购率(保留4位小数) category_metrics["复购率"]=round(category_metrics["复购用户数"]/ category_metrics["购买用户数"],4)# 步骤7:按复购率降序排序 category_metrics_sorted = category_metrics.sort_values("复购率", ascending=False)print("\n=== 2024年1-4月各商品类别复购率(按复购率降序) ===")print(category_metrics_sorted)# 可选:保存结果到 CSV category_metrics_sorted.to_csv("./2024Q1Q2_category_repurchase_rate.csv", index=False, encoding="utf-8-sig")print("\n=== 结果已保存至 ./2024Q1Q2_category_repurchase_rate.csv ===")
结果验证:
  1. 业务逻辑验证:随机抽取 10 个“用户-类别”组合,手动检查购买日期差是否符合复购定义,确认 is_repurchase_user 标记正确;
  2. 数据一致性验证:确认“购买用户数”等于 user_category_dates 中每个类别的 user_id 去重数量,复购率计算无逻辑错误。

案例 4:代码报错排查——报错排查场景

需求背景:

运行 Pandas 代码时出现 ValueError: Cannot merge on int64 and object columns,无法完成表合并,需用 Prompt 排查并修改。

Prompt 设计:
我运行以下 Pandas 代码时出现报错,无法合并两个 DataFrame,请帮我分析原因并修改: 【代码功能】 合并“用户表”(df_users)和“订单表”(df_orders),关联字段为“user_id”,目的是获取每个用户的订单信息。 【代码片段】 import pandas as pd # 读取用户表(CSV) df_users = pd.read_csv("./users.csv") print("df_users 列名和数据类型:") print(df_users.dtypes) # 输出: # user_id int64 # user_name object # age int64 # dtype: object # 读取订单表(Excel) df_orders = pd.read_excel("./orders.xlsx", sheet_name="2024订单") print("\ndf_orders 列名和数据类型:") print(df_orders.dtypes) # 输出: # order_id object # user_id object # order_date datetime64[ns] # amount float64 # dtype: object # 合并两个表(按 user_id 内连接) df_merged = pd.merge( left=df_users, right=df_orders, on="user_id", how="inner" ) 【报错信息】 ValueError: Cannot merge on int64 and object columns. Both key columns must be the same dtype. 请帮我:1. 解释报错的具体原因;2. 提供两种不同的修改方案(代码完整);3. 说明如何预防此类合并报错。 
模型输出(ChatGPT 3.5 为例):
# 1. 报错原因解释:# Pandas 的 merge 操作要求“关联字段(on 指定的列)的数据类型必须一致”,否则无法匹配数据。# 本例中:# - df_users["user_id"] 是 int64 类型(整数,如 1001、1002);# - df_orders["user_id"] 是 object 类型(字符串,如 "1001"、"1002" 或 "U1001");# 整数类型与字符串类型无法直接比较合并,因此抛出 ValueError。# 2. 两种修改方案(均能解决问题,可根据实际数据选择)# 方案一:将 df_users["user_id"] 转为 object 类型(推荐,若订单表 user_id 含非数字字符,如 "U1001")import pandas as pd # 读取数据 df_users = pd.read_csv("./users.csv") df_orders = pd.read_excel("./orders.xlsx", sheet_name="2024订单")# 修改数据类型:int64 → object df_users["user_id"]= df_users["user_id"].astype(str)# 转为字符串类型(object)# 验证修改后的数据类型print("修改后 df_users 数据类型:")print(df_users.dtypes)# user_id 应为 objectprint("\n修改后 df_orders 数据类型:")print(df_orders.dtypes)# user_id 保持 object# 合并表 df_merged = pd.merge( left=df_users, right=df_orders, on="user_id", how="inner")print(f"\n合并成功!合并后数据行数:{len(df_merged)}")print("合并后数据前5行:")print(df_merged[["user_id","user_name","order_id","amount"]].head())# 方案二:将 df_orders["user_id"] 转为 int64 类型(仅适用于订单表 user_id 全为数字字符串,如 "1001",无字母/特殊字符)import pandas as pd # 读取数据 df_users = pd.read_csv("./users.csv") df_orders = pd.read_excel("./orders.xlsx", sheet_name="2024订单")# 先检查 df_orders["user_id"] 是否全为数字字符串(避免转换失败)defis_all_numeric(series):return series.apply(lambda x:str(x).isdigit()).all()if is_all_numeric(df_orders["user_id"]):# 若全为数字字符串,转为 int64 类型 df_orders["user_id"]= df_orders["user_id"].astype(int)else:# 若含非数字字符,抛出提示,避免转换报错raise ValueError("df_orders['user_id'] 包含非数字字符,无法转为 int64 类型,请使用方案一!")# 验证修改后的数据类型print("修改后 df_users 数据类型:")print(df_users.dtypes)# user_id 保持 int64print("\n修改后 df_orders 数据类型:")print(df_orders.dtypes)# user_id 应为 int64# 合并表 df_merged = pd.merge( left=df_users, right=df_orders, on="user_id", how="inner")print(f"\n合并成功!合并后数据行数:{len(df_merged)}")print("合并后数据前5行:")print(df_merged[["user_id","user_name","order_id","amount"]].head())# 3. 预防 merge 报错的建议:# - 合并前必做:用 df.dtypes 查看关联字段的数据类型,确保一致;# - 读取数据时指定类型:若已知关联字段类型,可在 read_csv/read_excel 时指定,避免自动识别错误:# df_users = pd.read_csv("./users.csv", dtype={"user_id": str}) # 读取时直接设为 object 类型# - 处理特殊字符:若订单表 user_id 含前缀(如 "U1001"),优先将用户表 user_id 转为 object 类型,而非强行转为 int64;# - 合并前检查数据:用 df[col].unique() 查看关联字段的样本值,确认无格式异常(如空格、换行符)。
结果验证:
  1. 运行方案一代码,确认 df_users["user_id"] 转为 object 类型后,merge 操作无报错;
  2. df_orders["user_id"] 全为数字字符串,运行方案二代码也可成功合并;
  3. 合并后的数据行数符合预期(无丢失正常数据)。

案例 5:批量生成月度报表——批量自动化场景

需求背景:

每月需生成 12 个地区的“销售报表”(包含销售额、订单数、客单价),手动重复操作繁琐,需用 Prompt 生成批量处理代码。

Prompt 设计:
我是电商运营,每月需生成 12 个地区的月度销售报表,需求如下: 1. 数据源:每月 1 个 CSV 文件,路径格式为 ./sales_2024XX.csv(XX 为月份,如 01=1月,06=6月); 2. 数据结构:每个 CSV 含列名 order_id、user_id、region(地区,如"北京""上海""广州")、amount(订单金额)、order_date(日期); 3. 报表要求:对每个月份的每个地区,计算 3 个指标: - 总销售额:该地区该月 amount 总和(保留 2 位小数); - 总订单数:该地区该月 order_id 去重计数; - 客单价:总销售额 / 总订单数(保留 2 位小数); 4. 输出格式:每个月份生成 1 个 Excel 文件,路径为 ./monthly_report_2024XX.xlsx,每个 Excel 包含 12 个地区的报表(1 个地区 1 个 sheet,sheet 名=地区名); 5. 批量范围:生成 2024 年 1-6 月的报表(即 XX=01 至 06)。 请写一段 Pandas 代码,实现上述批量自动化操作,要求: 1. 用循环遍历月份,自动读取对应 CSV 并生成 Excel; 2. 代码中包含异常处理(如文件不存在时提示,跳过该月份); 3. 每个 Excel 的 sheet 中,报表格式清晰(含标题、指标说明); 4. 生成完成后,打印“批量处理完成,成功生成 X 个月份报表,失败 Y 个月份”。 
模型输出(Claude 3 为例):
import pandas as pd import os from openpyxl import Workbook from openpyxl.styles import Font, Alignment from openpyxl.utils.dataframe import dataframe_to_rows # 配置参数 year ="2024" months =["01","02","03","04","05","06"]# 批量处理的月份 input_dir ="./"# 输入 CSV 文件所在目录 output_dir ="./"# 输出 Excel 报表所在目录 regions =["北京","上海","广州","深圳","杭州","成都","南京","武汉","西安","重庆","天津","苏州"]# 12个目标地区# 初始化统计变量 success_count =0# 成功生成报表的月份数 fail_count =0# 失败的月份数 fail_months =[]# 失败的月份列表# 批量处理每个月份for month in months:try:# 步骤1:构造输入 CSV 路径,检查文件是否存在 csv_filename =f"sales_{year}{month}.csv" csv_path = os.path.join(input_dir, csv_filename)ifnot os.path.exists(csv_path):raise FileNotFoundError(f"文件不存在:{csv_path}")# 步骤2:读取 CSV 数据,筛选目标地区(避免处理无关地区) df = pd.read_csv(csv_path) df_target = df[df["region"].isin(regions)].copy()# 只保留 12 个目标地区的数据iflen(df_target)==0:raise ValueError(f"{year}年{month}月数据中,无目标地区(12个地区)的订单记录")# 步骤3:按 region 分组,计算核心指标 region_metrics = df_target.groupby("region").agg( 总销售额=("amount",lambda x:round(x.sum(),2)),# 总和保留2位小数 总订单数=("order_id","nunique"),# 订单ID去重计数).reset_index()# 计算客单价(总销售额 / 总订单数),避免除以0 region_metrics["客单价"]= region_metrics.apply(lambda row:round(row["总销售额"]/ row["总订单数"],2)if row["总订单数"]>0else0.00, axis=1)# 步骤4:创建 Excel 文件,为每个地区生成 1 个 sheet excel_filename =f"monthly_report_{year}{month}.xlsx" excel_path = os.path.join(output_dir, excel_filename)# 使用 openpyxl 创建工作簿(支持自定义格式) wb = Workbook()# 删除默认的 "Sheet" 工作表 wb.remove(wb.active)# 为每个地区生成 sheetfor region in regions:# 筛选该地区的指标数据 region_data = region_metrics[region_metrics["region"]== region].copy()# 若该地区无数据,填充为 0iflen(region_data)==0: region_data = pd.DataFrame({"地区":[region],"总销售额(元)":[0.00],"总订单数(笔)":[0],"客单价(元/笔)":[0.00]})else:# 重命名列,添加单位说明 region_data = region_data.rename(columns={"region":"地区","总销售额":"总销售额(元)","总订单数":"总订单数(笔)","客单价":"客单价(元/笔)"})# 创建新 sheet,命名为地区名 ws = wb.create_sheet(title=region)# 添加报表标题 title =f"{year}年{month}月 {region} 销售报表" ws.merge_cells('A1:D1')# 合并 A1-D1 单元格作为标题 ws['A1']= title # 设置标题格式(字体加粗、字号14、居中对齐) ws['A1'].font = Font(bold=True, size=14) ws['A1'].alignment = Alignment(horizontal='center', vertical='center')# 添加空行(美观) ws.append([])# 添加数据行(从 A3 开始)for r in dataframe_to_rows(region_data, index=False, header=True): ws.append(r)# 设置表头格式(字体加粗、居中对齐)for cell in ws[3]:# 表头在第3行(A3-D3) cell.font = Font(bold=True) cell.alignment = Alignment(horizontal='center')# 调整列宽 ws.column_dimensions['A'].width =10# 地区列 ws.column_dimensions['B'].width =15# 总销售额列 ws.column_dimensions['C'].width =15# 总订单数列 ws.column_dimensions['D'].width =18# 客单价列# 保存 Excel 文件 wb.save(excel_path) success_count +=1print(f"✅ 成功生成:{excel_path}")except Exception as e:# 捕获所有异常,记录失败信息 fail_count +=1 fail_months.append(f"{year}年{month}月")print(f"❌ {year}年{month}月处理失败:{str(e)}")# 步骤5:打印批量处理结果汇总print("\n"+"="*50)print(f"批量处理完成!")print(f"成功生成报表:{success_count} 个月份")print(f"失败月份:{fail_count} 个({', '.join(fail_months)if fail_months else'无'})")print("="*50)
结果验证:
  1. 文件生成验证:检查 ./ 目录下是否生成 monthly_report_202401.xlsxmonthly_report_202406.xlsx 文件;
  2. 内容验证:打开任意 Excel 文件,确认每个地区的 sheet 包含“标题+指标数据+格式美化”,指标计算正确(如总销售额=该地区金额总和);
  3. 异常处理验证:删除 sales_202403.csv 文件,运行代码,确认提示“2024年03月处理失败:文件不存在”,且不影响其他月份处理。

五、常见问题与解决方案(FAQ)

在 Prompt 与 Pandas 结合使用过程中,使用者常遇到“模型生成代码报错”“结果不符合预期”等问题。下表梳理了 8 个高频问题及对应的解决方案:

常见问题可能原因解决方案
模型生成的代码中,列名与实际数据集不匹配Prompt 中未提供数据集的真实列名,模型默认使用通用列名(如 user_id 实际为 用户ID1. 在 Prompt 中明确列出所有列名(含中文/英文);2. 提供 1-2 行样本数据(如“样本数据:user_id=1001, 订单金额=299.0”)
生成的代码处理大规模数据时内存溢出模型未考虑数据规模,生成的代码使用全量加载(如 pd.read_csv 未指定 dtypechunksize1. 在 Prompt 中说明数据规模(如“500万行,10列”);2. 要求模型添加内存优化代码(如指定 dtype={"category_col": "category"}、用 chunksize 分块读取)
代码运行后结果正确,但逻辑冗余(如多步操作可合并)Prompt 中拆分步骤过细,导致模型按“分步执行”生成代码,未做逻辑合并1. 在 Prompt 中添加“代码需简洁,合并可优化的步骤”;2. 生成代码后,补充 Prompt:“请优化上述代码,合并冗余步骤,保持功能不变”
模型无法理解复杂的业务指标定义(如“LTV 计算”)Prompt 中未清晰定义业务指标的计算逻辑,仅提及指标名称1. 在 Prompt 中用公式+文字说明指标定义(如“LTV=用户近12个月消费总额 × 留存率”);2. 拆分指标计算步骤(如“第一步:计算用户近12个月消费总额;第二步:计算留存率”)
生成的代码使用已过时的 Pandas 函数(如 pd.DataFrame.append,Pandas 2.0+ 已弃用)模型训练数据未覆盖最新 Pandas 版本(如仅更新到 1.5 版本)1. 在 Prompt 中指定 Pandas 版本(如“请使用 Pandas 2.1+ 版本的函数,避免使用 append()”);2. 若生成过时函数,补充 Prompt:“请将代码中的 append() 替换为 Pandas 2.0+ 支持的 concat() 或 _append()”
多表合并后,数据行数远超预期(出现笛卡尔积)1. 关联字段(on 参数)存在重复值;2. 模型使用错误的合并方式(如 how="outer" 实际需 how="inner"1. 在 Prompt 中说明关联字段的唯一性(如“user_id 在 df_users 中唯一,在 df_orders 中可重复”);2. 明确指定合并方式(如“按 user_id 内连接,只保留两表都存在的用户”)
代码中包含硬编码值(如 amount.fillna(100),100 为固定值)Prompt 中未要求“动态计算参数”,模型默认使用固定值简化代码1. 在 Prompt 中添加“避免硬编码,动态计算参数(如中位数、均值)”;2. 示例:“用该列的中位数填充缺失值,而非固定值 100”
生成的代码缺少注释,难以理解逻辑Prompt 中未要求添加注释,模型默认生成无注释代码1. 在 Prompt 中明确要求“代码中添加详细注释,说明每个步骤的目的”;2. 若已生成无注释代码,补充 Prompt:“请为上述代码添加逐行注释,解释每个操作的作用”

六、章节总结与扩展学习建议

1. 章节总结

本章从“基础认知→核心技巧→实战案例→FAQ”四个维度,系统讲解了 Prompt 与 Pandas 结合的使用方法,核心要点可概括为:

  • 核心价值:Prompt 能降低 Pandas 学习门槛,提升数据处理效率,尤其适合“需求模糊”“复杂逻辑”“批量自动化”场景;
  • Prompt 设计关键:必须包含“数据结构(列名、类型)+ 操作目标 + 输出格式 + 业务规则(若有)”,复杂需求需拆分步骤;
  • 实战核心:不同场景(代码生成、优化、报错排查)需针对性设计 Prompt,生成代码后需验证“功能正确性+效率+可读性”。

2. 扩展学习建议

若想进一步提升“Prompt 与 Pandas 结合”的能力,可从以下 3 个方向深入学习:

  • 方向 1:Pandas 高级功能与 Prompt 结合
    学习 Pandas 高级操作(如 pivot_tablewindow 函数、自定义 aggfunc),并设计 Prompt 让模型生成对应代码(如“用 Pandas window 函数计算每个用户的 7 天滚动平均消费金额”)。
  • 方向 2:结合 RAG 技术优化 Prompt
    若需处理企业内部私有数据集(如含特殊字段、业务规则),可搭建 RAG(检索增强生成)系统:将数据集结构、业务指标定义存入知识库,Prompt 生成时自动检索相关信息,确保模型生成的代码贴合企业实际数据。
  • 方向 3:Prompt 与 Pandas 自动化工具开发
    基于本章内容,开发简单的自动化工具:如“Prompt 转 Pandas 代码”Web 界面(用户输入自然语言需求,后端调用大模型生成代码并返回),或“Pandas 报错修复工具”(用户输入报错信息,工具生成修改方案)。

七、课后练习

为帮助读者巩固本章知识,设计以下 2 个练习,答案见本节末尾。

练习 1:基础练习——数据筛选与统计

需求
有一份 CSV 数据(./user_behavior.csv),结构如下:

  • user_id(字符串,用户ID)
  • behavior_time(datetime 类型,行为时间)
  • behavior_type(字符串,行为类型:“浏览”“收藏”“加购”“购买”)
  • product_id(字符串,商品ID)

请设计 Prompt,让模型生成 Pandas 代码,完成以下操作:

  1. 读取 CSV 文件;
  2. 筛选出 2024 年 5 月 1 日至 5 月 7 日(含首尾)的“购买”行为数据;
  3. 按 product_id 分组,计算每个商品的购买次数(命名为 purchase_count);
  4. 筛选出 purchase_count ≥ 10 的商品,按 purchase_count 降序排序;
  5. 将结果保存为 ./hot_products_20240501_0507.csv,不保留索引。

练习 2:进阶练习——代码优化

需求
以下代码用于计算“每个用户的最后一次购买时间”,但处理 100 万行数据耗时 30 秒,请设计 Prompt,让模型分析低效原因并优化代码:

import pandas as pd import time # 读取数据(100万行,user_id 约 50 万个唯一值) df = pd.read_csv("./user_purchases.csv") df["purchase_time"]= pd.to_datetime(df["purchase_time"]) start_time = time.time()# 初始化字典存储每个用户的最后购买时间 last_purchase ={}# 遍历所有行,更新最后购买时间for _, row in df.iterrows(): user = row["user_id"] time = row["purchase_time"]if user notin last_purchase or time > last_purchase[user]: last_purchase[user]= time # 转换为 DataFrame df_result = pd.DataFrame(list(last_purchase.items()), columns=["user_id","last_purchase_time"]) end_time = time.time()print(f"耗时:{end_time - start_time:.2f} 秒")

练习答案(提示)

练习 1 Prompt 设计参考:
我有一份用户行为 CSV 数据,路径为 ./user_behavior.csv,数据结构如下: - 列名1:user_id(数据类型:字符串,用户ID) - 列名2:behavior_time(数据类型:datetime 类型,行为时间,格式如"2024-05-01 09:30:00") - 列名3:behavior_type(数据类型:字符串,取值为"浏览""收藏""加购""购买") - 列名4:product_id(数据类型:字符串,商品ID) 请写一段 Pandas 代码,完成以下操作: 1. 读取该 CSV 文件,确保 behavior_time 被正确解析为 datetime 类型; 2. 筛选出 behavior_time 在 2024-05-01 00:00:00 至 2024-05-07 23:59:59 期间,且 behavior_type 为"购买"的数据; 3. 按 product_id 分组,计算每个商品的购买次数(即该组的行数,命名为 purchase_count); 4. 从分组结果中筛选出 purchase_count ≥ 10 的商品,并按 purchase_count 降序排序; 5. 将最终结果保存为 CSV 文件,路径为 ./hot_products_20240501_0507.csv,不保留索引列。 要求:代码中添加注释,说明每个步骤的目的;验证筛选后的数据时间范围和行为类型是否正确。 
练习 2 Prompt 设计参考:
我有一段 Pandas 代码,用于计算每个用户的最后一次购买时间,处理 100 万行数据耗时约 30 秒,效率极低: 【代码片段】 import pandas as pd import time df = pd.read_csv("./user_purchases.csv") df["purchase_time"] = pd.to_datetime(df["purchase_time"]) start_time = time.time() last_purchase = {} for _, row in df.iterrows(): user = row["user_id"] time = row["purchase_time"] if user not in last_purchase or time > last_purchase[user]: last_purchase[user] = time df_result = pd.DataFrame(list(last_purchase.items()), columns=["user_id", "last_purchase_time"]) end_time = time.time() print(f"耗时:{end_time - start_time:.2f} 秒") 请帮我:1. 分析代码效率低的根本原因;2. 用 Pandas 内置函数(如 groupby)优化代码,确保功能不变;3. 预估优化后的耗时;4. 说明优化后的代码为何效率更高。 

优化后代码核心逻辑参考:
groupby("user_id")["purchase_time"].max() 直接获取每个用户的最后购买时间,替代 iterrows() 循环,预估耗时降至 1-2 秒。

八、本章小结

Prompt 与 Python Pandas 的结合,本质是“自然语言需求”与“代码实现”之间的桥梁。通过精准的 Prompt 设计,不仅能让初学者快速上手 Pandas 数据处理,还能让资深使用者摆脱重复编码的繁琐,将精力聚焦于“需求分析”和“结果解读”。

本章的核心不是“让模型替代人写代码”,而是“通过 Prompt 提升人用 Pandas 的效率”——最终目标是让使用者具备“用自然语言驱动数据处理”的能力,在数据分析、业务报表、自动化任务等场景中实现“需求提出→Prompt 设计→代码生成→结果验证”的闭环。

后续学习中,建议读者结合自身工作场景(如电商、金融、医疗),针对性设计 Prompt,不断验证和优化模型输出,逐步形成适合自己的“Prompt 与 Pandas 结合”工作流。

联系博主

    xcLeigh 博主,全栈领域优质创作者,博客专家,目前,活跃在ZEEKLOG、微信公众号、小红书、知乎、掘金、快手、思否、微博、51CTO、B站、腾讯云开发者社区、阿里云开发者社区等平台,全网拥有几十万的粉丝,全网统一IP为 xcLeigh。希望通过我的分享,让大家能在喜悦的情况下收获到有用的知识。主要分享编程、开发工具、算法、技术学习心得等内容。很多读者评价他的文章简洁易懂,尤其对于一些复杂的技术话题,他能通过通俗的语言来解释,帮助初学者更好地理解。博客通常也会涉及一些实践经验,项目分享以及解决实际开发中遇到的问题。如果你是开发领域的初学者,或者在学习一些新的编程语言或框架,关注他的文章对你有很大帮助。

    亲爱的朋友,无论前路如何漫长与崎岖,都请怀揣梦想的火种,因为在生活的广袤星空中,总有一颗属于你的璀璨星辰在熠熠生辉,静候你抵达。

     愿你在这纷繁世间,能时常收获微小而确定的幸福,如春日微风轻拂面庞,所有的疲惫与烦恼都能被温柔以待,内心永远充盈着安宁与慰藉。

    至此,文章已至尾声,而您的故事仍在续写,不知您对文中所叙有何独特见解?期待您在心中与我对话,开启思想的新交流。


     💞 关注博主 🌀 带你实现畅游前后端!

     🏰 大屏可视化 🌀 带你体验酷炫大屏!

     💯 神秘个人简介 🌀 带你体验不一样得介绍!

     🥇 从零到一学习Python 🌀 带你玩转Python技术流!

     🏆 前沿应用深度测评 🌀 前沿AI产品热门应用在线等你来发掘!

     💦 :本文撰写于ZEEKLOG平台,作者:xcLeigh所有权归作者所有)https://xcleigh.blog.ZEEKLOG.net/,如果相关下载没有跳转,请查看这个地址,相关链接没有跳转,皆是抄袭本文,转载请备注本文原地址。


在这里插入图片描述

     📣 亲,码字不易,动动小手,欢迎 点赞 ➕ 收藏,如 🈶 问题请留言(或者关注下方公众号,看见后第一时间回复,还有海量编程资料等你来领!),博主看见后一定及时给您答复 💌💌💌

Read more

最全java面试题及答案(208道)

最全java面试题及答案(208道)

本文分为十九个模块,分别是:「Java 基础、容器、多线程、反射、对象拷贝、Java Web 、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、MyBatis、RabbitMQ、Kafka、Zookeeper、MySQL、Redis、JVM」 ,如下图所示: 共包含 208 道面试题,本文的宗旨是为读者朋友们整理一份详实而又权威的面试清单,下面一起进入主题吧。 Java 基础 1. JDK 和 JRE 有什么区别? * JDK:Java Development Kit 的简称,Java 开发工具包,提供了 Java

By Ne0inhk
用 DeepSeek 打造你的超强代码助手

用 DeepSeek 打造你的超强代码助手

DeepSeek Engineer 是啥? 简单来说,DeepSeek Engineer 是一个基于命令行的智能助手。它能帮你完成这些事: * 快速读文件内容:比如你有个配置文件,直接用命令把它加载进助手,后续所有操作都可以基于这个文件。 * 自动改文件:它不仅能提建议,还可以直接生成差异表(diff),甚至自动应用修改。 * 智能代码生成:比如你让它生成代码片段,它会按照指定格式和规则直接返回。 更重要的是,这一切都是通过 DeepSeek 的强大 API 来实现的。想象一下,你有个贴身助手,不仅能听懂你的代码需求,还能直接动手帮你写! 核心功能拆解 我们先来看 DeepSeek Engineer 的几个核心能力,让你更好地理解它的强大之处。 1. 自动配置 DeepSeek 客户端 启动这个工具时,你只需要准备一个 .env 文件,里面写上你的 API Key,比如: DEEPSEEK_API_

By Ne0inhk
解锁DeepSeek潜能:Docker+Ollama打造本地大模型部署新范式

解锁DeepSeek潜能:Docker+Ollama打造本地大模型部署新范式

🐇明明跟你说过:个人主页 🏅个人专栏:《深度探秘:AI界的007》 🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、什么是Docker 2、什么是Ollama 二、准备工作 1、操作系统 2、镜像准备 三、安装 1、安装Docker 2、启动Ollama 3、拉取Deepseek大模型 4、启动Deepseek  一、引言 1、什么是Docker Docker:就像一个“打包好的App” 想象一下,你写了一个很棒的程序,在自己的电脑上运行得很好。但当你把它发给别人,可能会遇到各种问题: * “这个软件需要 Python 3.8,但我只有 Python 3.6!

By Ne0inhk
深挖 DeepSeek 隐藏玩法·智能炼金术2.0版本

深挖 DeepSeek 隐藏玩法·智能炼金术2.0版本

前引:屏幕前的你还在AI智能搜索框这样搜索吗?“这道题怎么写”“苹果为什么红”“怎么不被发现翘课” ,。看到此篇文章的小伙伴们!请准备好你的思维魔杖,开启【霍格沃茨模式】,看我如何更新秘密的【知识炼金术】,我们一起来解锁更加刺激的剧情!友情提醒:《《《前方高能》》》 目录 在哪使用DeepSeek 如何对提需求  隐藏玩法总结 几个高阶提示词 职场打工人 自媒体创作 电商实战 程序员开挂 非适用场地 “服务器繁忙”如何解决 (1)硅基流动平台 (2)Chatbox + API集成方案 (3)各大云平台 搭建个人知识库 前置准备 下载安装AnythingLLM 选择DeepSeek作为AI提供商 创作工作区 导入文档 编辑  编辑 小编寄语 ——————————————————————————————————————————— 在哪使用DeepSeek 我们解锁剧情前,肯定要知道在哪用DeepSeek!咯,为了照顾一些萌新朋友,它的下载方式我放在下面了,拿走不谢!  (1)

By Ne0inhk