AI技术极简教程:PandasAI入门指南
数据分析不求人,PandasAI助你一臂之力!”
引言
大家好,欢迎来到我们的“AI技术极简教程”系列!在这个系列中,我们会用最简单、最有趣的方式,带你快速掌握各种AI工具和技术。无论你是技术老手,还是刚入门的小白,这里都有你需要的干货。
今天的主角是 PandasAI —— 一个让数据分析变得像喝水一样简单的神器!通过这篇博客,你将学会如何安装PandasAI、上传Excel/CSV文件,以及使用Agent进行基本的数据分析。准备好了吗?让我们一起开启这段轻松愉快的学习之旅吧!(顺便安利一下,我的可莉Excel就是基于PandasAI开发的,感兴趣的读者欢迎注册体验:http://www.dlb.org.cn)
安装与配置
安装它,就像"Hello World"一样简单,只需几行命令:
使用pip安装
▼python复制代码pip install pandasai
使用Poetry安装(推荐)
▼python复制代码poetry add pandasai
小贴士:
- 为了避免“依赖地狱”,建议你使用虚拟环境(比如Poetry、Pipenv或Conda)来管理项目依赖。这样,你的项目就像有了自己的私人健身教练,独立又高效!
- Python版本不宜过高,目前好像不兼容,我使用的是Python 3.10系列
快速入门
导入与设置
让我们从一个简单的例子开始,看看如何用PandasAI进行数据查询。准备好了吗?拿起你的代码键盘,我们出发!
▼python复制代码import os import pandas as pd from pandasai import Agent # 设置你的PandasAI API密钥 os.environ["PANDASAI_API_KEY"] = "YOUR_API_KEY" # 创建一个示例DataFrame sales_by_country = pd.DataFrame({ "country": ["美国", "英国", "法国", "德国", "意大利", "西班牙", "加拿大", "澳大利亚", "日本", "中国"], "sales": [5000, 3200, 2900, 4100, 2300, 2100, 2500, 2600, 4500, 7000] }) # 实例化Agent agent = Agent(sales_by_country) # 使用自然语言查询数据 response = agent.chat('销售额前五的国家是哪些?') print(response) # 输出: 中国, 美国, 日本, 德国, 澳大利亚
解释时间:看到了吗?只需几行代码,你就能用自然语言和你的数据对话,PandasAI帮你找出“销售额前五的国家”。简直比聊天机器人还聪明!
**小贴士:**这个PandasAI API密钥你可以到他们官网 https://pandabi.ai 获取,当然你也可以替换为其他大模型,比如OpenAI、最近很火的DeepSeek等,这个后边会介绍,感兴趣可以往下看。
配置API密钥
PandasAI需要API密钥才能发挥魔法。你可以通过以下两种方式设置:
方法一:环境变量
在终端中输入:
▼shell复制代码export PANDASAI_API_KEY="YOUR_API_KEY"
方法二:在Python脚本中设置
▼python复制代码import os os.environ["PANDASAI_API_KEY"] = "YOUR_API_KEY"
小贴士:为了安全起见,别把你的API密钥写在代码里,尤其是公开的地方。让它藏在环境变量里,就像把糖藏在隐蔽的角落,甜蜜又安全!
上传Excel/CSV文件
PandasAI不仅能处理手动创建的DataFrame,还能轻松读取你的Excel或CSV文件:
▼python复制代码# 读取CSV文件 df = pd.read_csv('data/sales_data.csv') # 或者读取Excel文件 df = pd.read_excel('data/sales_data.xlsx')
小贴士:只要你的文件格式支持,PandasAI都能轻松驾驭。无论是Excel的复杂表格,还是CSV的简洁数据,都不在话下!(还可以直连多数主流数据库,这个下边也会简单介绍)
使用Agent进行数据分析
现在,上传数据后,如何用PandasAI进行分析呢?简单,只需几行代码:
▼python复制代码# 实例化Agent agent = Agent(df) # 使用自然语言查询 response = agent.chat('销售额前五的国家是哪些?') print(response) # 输出: 中国, 美国, 日本, 德国, 澳大利亚
解释时间:通过Agent,你可以像和朋友聊天一样问数据问题,PandasAI会给你专业的分析结果。是不是感觉自己瞬间变成了数据分析大师?(当然,Pandasai还提供了除了Agent之外的其他数据类型:SmartDataframe、SmartDatalake,但Agent能力是最全的,可以满足绝大多数需求)
主要功能与特性
自然语言查询
不用再为复杂的Pandas语法发愁,直接用自然语言问问题,PandasAI帮你搞定:
▼python复制代码response = agent.chat('2023年的总销售额是多少?') print(response) # 输出: 42000
多种数据连接器
PandasAI支持多种数据源,不管你是Excel狂人还是数据库专家,都能找到合适的连接器:
- 文件类型:CSV、Excel、Parquet
- 数据库:PostgreSQL、MySQL、SQLite、Snowflake、Databricks、Google BigQuery
- 其他数据源:Yahoo Finance、Airtable、Google Sheets
支持多种大型语言模型(LLM)
默认使用BambooLLM,但你也可以选择OpenAI、Google PaLM、Azure OpenAI等其他模型,满足不同需求:
▼python复制代码from pandasai.llm import OpenAI llm = OpenAI(api_token="YOUR_OPENAI_API_KEY") agent = Agent(df, llm=llm) response = agent.chat('销售额前五的国家是哪些?') print(response)
平台部署
如果你想让团队成员也享受PandasAI的魔法,或者想在云端部署它,PandasAI提供了Docker化的客户端-服务器架构,简单又方便!感兴趣的伙伴可以查看官方文档:https://docs.pandas-ai.com
示例项目
与 Pandas DataFrame 一起使用
让我们通过一个具体的例子,看看如何上传CSV文件并使用Agent进行数据分析:
▼python复制代码import os from pandasai import SmartDataframe import pandas as pd # 设置API密钥 os.environ["PANDASAI_API_KEY"] = "YOUR_API_KEY" # 创建DataFrame(或读取文件) sales_by_country = pd.DataFrame({ "country": ["美国", "英国", "法国", "德国", "意大利", "西班牙", "加拿大", "澳大利亚", "日本", "中国"], "sales": [5000, 3200, 2900, 4100, 2300, 2100, 2500, 2600, 4500, 7000] }) # 转换为SmartDataframe sdf = SmartDataframe(sales_by_country) # 查询 response = sdf.chat('销售额前五的国家是哪些?') print(response) # 输出: 中国, 美国, 日本, 德国, 澳大利亚
小贴士:只需几行代码,你就能让数据“说话”,PandasAI帮你解读数据背后的故事!
连接到 PostgreSQL 数据库
如果你有大量数据存储在数据库中,PandasAI同样能轻松应对:
▼python复制代码from pandasai import Agent import pandas as pd # 示例连接字符串 connection_string = "postgresql://username:password@localhost:5432/mydatabase" # 从 PostgreSQL 加载数据 df = pd.read_sql("SELECT * FROM sales_data", connection_string) # 使用 DataFrame 实例化 Agent agent = Agent(df) # 查询数据 response = agent.chat('2023年的总销售额是多少?') print(response) # 输出: 42000
解释时间:无论数据存在哪儿,PandasAI都能帮你快速获取所需信息,让数据分析如同呼吸般自然!
高级功能概览
虽然本篇博客主要介绍PandasAI的基础使用,以下是一些高级功能的简要概述,激发你的兴趣:
- 语义代理:通过生成JSON查询,实现更准确和可解释的查询结果。
- Judge Agent:验证生成的代码是否符合查询要求,确保结果可靠。
- 高级安全代理:识别和阻止潜在的恶意代码生成,保障数据安全。
- 缓存机制:存储和快速检索之前的查询结果,提升响应速度。
- 自定义响应解析器:控制输出格式,如Pandas DataFrame或Streamlit图表。
- 技能(Skills):添加自定义函数,扩展代理功能,打造专属数据分析助手。
小贴士:这些高级功能将在后续的博客中详细介绍,敬请期待!
使用其他兼容OpenAI接口的AI模型
虽然官方文档仅提及兼容OpenAI模型,但我们只需略微采用一些手段,也可以使用我们喜欢的(便宜又好用的)模型,比如我的 可莉Excel 项目使用的就是DeepSeek(深思3.0)模型。不得不说确实NB,不亏是我们中国人自己的OpenAI。
下面给出教程:
原理很简单,你需要自己准备一个服务端,让PandasAI的请求打到你的服务端,然后你再把参数(base_url,model等)替换,请求到你需要的模型API,最后将结果返回给PandasAI应用即可(很蠢但也很好用的办法)
PandasAI应用:
▼Python复制代码def init_agent(df): """ 初始化AI Agent (PandasAI) """ try: llm = OpenAI( api_token=os.getenv("OPENAI_API_KEY", config.OPENAI_API_KEY),#随便搞了,反正可以在你的服务端替换 model=os.getenv("DEFAULT_MODEL", config.DEFAULT_MODEL),#随便搞了,反正可以在你的服务端替换 api_base="https://api.deepseek.com" # 这里直接替换为你的服务端地址 ) except Exception as e: logger.error(f"初始化 OpenAI LLM 失败: {e}") raise e try: config_dict = { "llm": llm, } agent = Agent(df, config=config_dict) logger.info("PandasAI Agent 初始化成功。") return agent except Exception as e: logger.error(f"初始化 Agent 失败: {e}") raise e
服务端:
▼Python复制代码from fastapi import FastAPI, HTTPException, Request from openai import OpenAI router = FastAPI() ##因为DeepSeek兼容OpenAI接口,所有很方便 excel_client = OpenAI(api_key="XXXXXXX", base_url="https://api.deepseek.com") @router.post("/excel/{path:path}") async def chat(request: Request): print("接收到请求") try: req_data = await request.json() if "messages" not in req_data: raise HTTPException(status_code=400, detail={"error": "请求体中缺少 'messages' 字段"}) messages = req_data["messages"] if not isinstance(messages, list) or not all( isinstance(msg, dict) and "role" in msg and "content" in msg for msg in messages ): raise HTTPException( status_code=400, detail={"error": "'messages' 字段格式无效,必须是包含 'role' 和 'content' 的字典列表"} ) system_message = { "role": "system", "content": "无论用户使用何种语言提问,你只能只用中文回答" #PandasAI原有的提示词是英文,所以这里需要覆盖一下 } messages.insert(0, system_message) response = excel_client.chat.completions.create( model="deepseek-chat", # 这里记得替换 messages=messages, stream=False, # PandasAI好像不支持流式返回 frequency_penalty=0, #非必填 max_tokens=1000, #非必填 n=1, #非必填 presence_penalty=0, #非必填 temperature=0, #非必填 top_p=1, #非必填 ) response_dict = response.to_dict() if hasattr(response, "to_dict") else response return response_dict except HTTPException as e: raise e except Exception as e: raise HTTPException(status_code=500, detail={"error": "服务器内部错误", "details": str(e)})
这样你就可以为所欲为地替换不同厂家的AI了,一直轮流薅羊毛了
结语
恭喜你!通过本篇博客,你已经学会了如何安装PandasAI、上传Excel/CSV文件以及使用Agent进行基本的数据分析。现在,试着将这些知识应用到你的项目中,感受PandasAI带来的高效与便捷吧!
想了解更多高级功能和部署指南?别害羞,快去我们的参考地址: https://github.com/sinaptik-ai/pandas-ai 或官方文档:https://docs.pandas-ai.com 探索更多精彩内容!
进一步学习
-
官方文档:访问 https://docs.pandas-ai.com 获取更多详细信息。
-
示例项目:在 https://github.com/sinaptik-ai/pandas-ai 中查找更多示例代码和项目。
-
社区支持:加入PandasAI社区论坛或Slack群组,与其他用户交流经验。
-
**技术交流群:**你也可以加入我的技术交流群:AI极简技术交流群,和大家一起探讨AI新技术:
希望这篇极简的入门指南,能帮助你轻松踏入PandasAI的世界!下期见。
