PandasAI连接LLM进行智能数据分析

1. 引言

Pandas是一个数据分析开源组件库,提供了高性能、易用的数据结构和数据分析工具。它的核心的功能是其DataFrame对象,这是一个带有行和列标签的二维表格数据结构,支持缺失数据处理、时间序列功能、灵活的数据输入输出方法、数据对齐和分组操作等特性。

PandasAI则通过结合Pandas和生成式AI技术,使用户能够以自然语言与数据进行交互,从而简化数据分析流程。它的核心目标是让数据分析变得更直观、高效,甚至无需编写复杂代码即可完成数据查询、清洗、可视化等任务。

2. 详述

Pandas进行数据分析的流程笔者不是很熟练,这里重点关注一个问题就是PandasAI如何连接现有的大模型比如DeepSeek来进行智能数据分析。

由于经验不足,笔者在测试PandasAI的时候,将相关的组件都安装在默认全局的Python环境中了,导致版本有点低,使用的是v2版本。现在普通推荐使用Anaconda这样的工具安装虚拟环境来进行Python的依赖管理。不过根据PandasAI官网文档[[1]](#[1])提示,PandasAI 3.0仍然是beta版本,并且推荐使用Poetry管理Python依赖。所以这里笔者也就没有想升级到3.0,暂时先用稳定一定的2.X版本。

解决掉PandasAI 2.X的版本依赖问题之后,通过PandasAI连接DeepSeek进行智能数据分析的案例代码实现如下:

python 复制代码
import pandas as pd
from pandasai import SmartDataframe
from pandasai.llm.base import LLM
import requests

# 自定义DeepSeek大模型
class DeepSeekLLM(LLM):
    def __init__(self, api_url:str, api_key: str, model: str):
        super().__init__()
        self.api_url = api_url
        self.api_key = api_key
        self.model = model        


    def call(self, instruction, context: dict = None, **kwargs) -> str:  
        """
        PandasAI 用来向 LLM 模型发起请求的接口入口。

        Args:
            instruction (str): PandasAI 传入的 prompt,可能是 string 或自定义对象,表示用户的问题。
            context (dict, optional): 包含上下文信息(例如 DataFrame 元数据等),在部分 LLM 中可用。
            **kwargs: 保留接口向前兼容(比如未来增加其他参数时也能传入)。

        Returns:
            str: 执行指令后的结果输出。
        """

        # 把复杂的 Prompt 对象变成字符串
        if not isinstance(instruction, str):
            instruction = str(instruction)

        # 请求头
        headers = {
            "Authorization": f"Bearer {self.api_key}",   # DeepSeek身份验证
            "Content-Type": "application/json"
        }

        # 兼容 OpenAI 的 Chat Completion API的对话消息格式
        messages = [
            {
                "role": "system", # 设定 LLM 的行为
                "content": "You are a helpful AI assistant for data analysis."
            },
            {
                "role": "user",  # 是实际的问题
                "content": instruction
            }
        ]

        # 请求体
        payload = {
            "model": self.model,
            "messages": messages,
            "temperature": 0.0 # 值越低,回答的效果越稳定
        }

        # 发送post请求
        response = requests.post(self.api_url, headers=headers, json=payload)

        # 检查返回状态码,如果不是 200 则报错。
        if response.status_code != 200:
            raise Exception(f"DeepSeek API Error: {response.status_code}, {response.text}")

        # 解析返回结果
        result = response.json()
        return result["choices"][0]["message"]["content"]

    @property
    def type(self):
        return "deepseek-custom"

# Sample DataFrame
sales_by_country = pd.DataFrame({
    "country": ["United States", "United Kingdom", "France", "Germany", "Italy", "Spain", "Canada", "Australia", "Japan", "China"],
    "sales": [5000, 3200, 2900, 4100, 2300, 2100, 2500, 2600, 4500, 7000]
})

# 用自定义的 DeepSeek LLM
llm = DeepSeekLLM(
    api_url = "https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions",
    api_key="sk-xxx", 
    model="deepseek-r1")

df = SmartDataframe(sales_by_country, config={"llm": llm})

result = df.chat('列出销售额最高的3个国家。')

print(result)

如代码所示,关键的所在是需要自定义一个继承自LLM的能够连接DeepSeek的类DeepSeekLLM。其实PandasAI 2.X是可以使用提供了支持使用OpenAI的接口的,而连接DeepSeek的接口一般会兼容OpenAI。但是笔者尝试了之后不行,不能传入自定义的LLM地址。没办法只能自己自定义一个继承自LLMDeepSeekLLM类。

DeepSeekLLM类的关键就是call函数的实现,这是PandasAI用来向LLM模型发起请求的接口的入口。在这个函数实现中的关键就是通过兼容OpenAI的Chat API向自定义的DeepSeek服务发起post请求,具体的细节笔者已经在代码中进行注释,另外也可以查阅OpenAI API的相关文档。这里的实现并没有像《连接语言大模型(LLM)服务进行对话》一样使用openai模块或者LangChain框架,而是直接使用requests来发送HTTP请求,显得更加底层一点,不过原理都差不多。

最终运行的结果如下所示:

bash 复制代码
country  sales
0          China   7000
0          China   7000
1  United States   5000
2          Japan   4500

  1. PandasAI官方文档 ↩︎
相关推荐
AC赳赳老秦13 小时前
OpenClaw 助力技术面试:自动生成面试题、模拟面试、整理面试知识点
开发语言·python·面试·职场和发展·自动化·deepseek·openclaw
vivo互联网技术13 小时前
MagicWorld 实现长时交互视频世界建模
ai·aigc技术探索·世界模型·影像
我登哥MVP13 小时前
VS Code 安装 Claude Code 并接入 DeepSeek V4 Model
人工智能·python·node.js·agent·codex·deepseek·claude code
CAir213 小时前
copilot配置deepseek和skills
vscode·copilot·skill·deepseek
其实防守也摸鱼14 小时前
Claude 大模型新手入门与实战指南
人工智能·python·功能测试·ai·大模型·测评
yeflx14 小时前
SAM3 多类别实时检测的完整实践
ai
Dust-Chasing14 小时前
Claude Code源码剖析 - 权限系统
人工智能·python·ai
茉莉玫瑰花茶14 小时前
综合案例 - AI 智能租房助手 [ 4 ]
数据库·python·ai·langgraph
组合缺一14 小时前
SolonCode(编码智能体)支持鸿蒙 PC
java·华为·ai·ai编程·harmonyos·solon·soloncode
慢慢向上的蜗牛14 小时前
Qwen3-0.6B ONNX(KV-Cache)模型部署
llm·onnx·文本生成·自回归·kv-cache