LlamaIndex 针对数据集表格数据的Pandas 查询引擎

Pandas简介

Pandas 是一个强大的数据处理和分析库,广泛应用于 Python 数据科学和机器学习领域。它提供了丰富的数据结构和数据操作工具,使得数据清洗、转换、合并、重塑、选择等任务变得更加简单高效。以下是 Pandas 的一些主要特点和常用功能:

主要特点

  1. 数据结构

    • Series:一维带标签的数组,可以存储任何数据类型(整数、字符串、浮点数、Python 对象等)。
    • DataFrame:二维带标签的数据结构,可以看作是由多个 Series 组成的表格,支持不同的数据类型。
  2. 数据导入导出

    • 支持多种文件格式的数据读写,包括 CSV、Excel、SQL 数据库、JSON、HTML 等。
  3. 数据清洗

    • 提供了丰富的数据清洗工具,如缺失值处理、重复值处理、数据类型转换等。
  4. 数据选择和过滤

    • 强大的数据选择和过滤功能,支持按条件筛选、按索引选择、布尔索引等。
  5. 数据操作

    • 支持数据排序、去重、合并、分组聚合等操作。
  6. 时间序列分析

    • 提供了专门的时间序列数据处理功能,如日期范围生成、频率转换、移动窗口统计等。

常用功能

  1. 创建 DataFrame

    import pandas as pddata = {'Name': ['Alice', 'Bob', 'Charlie'],'Age': [25, 30, 35],'City': ['New York', 'Los Angeles', 'Chicago']
    }df = pd.DataFrame(data)
    
  2. 读取和保存数据

    # 读取 CSV 文件
    df = pd.read_csv('data.csv')# 保存 DataFrame 到 CSV 文件
    df.to_csv('output.csv', index=False)
    
  3. 数据选择和过滤

    # 按条件筛选
    young_people = df[df['Age'] < 30]# 按索引选择
    first_row = df.loc[0]# 按列名选择
    names = df['Name']
    
  4. 数据清洗

    # 处理缺失值
    df.dropna()  # 删除含有缺失值的行
    df.fillna(0)  # 用 0 填充缺失值# 重命名列
    df.rename(columns={'OldName': 'NewName'})
    
  5. 数据操作

    # 分组聚合
    age_group = df.groupby('City')['Age'].mean()# 合并 DataFrame
    df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
    df2 = pd.DataFrame({'A': [5, 6], 'B': [7, 8]})
    merged_df = pd.concat([df1, df2])# 排序
    sorted_df = df.sort_values(by='Age', ascending=False)
    
  6. 时间序列分析

    # 创建日期范围
    date_range = pd.date_range(start='1/1/2020', periods=10)# 设置 DataFrame 的索引为日期
    df.set_index(date_range, inplace=True)# 滚动窗口计算
    rolling_mean = df['Value'].rolling(window=3).mean()
    

总结

Pandas 是一个非常强大的库,适用于各种数据处理和分析任务。无论你是初学者还是有经验的数据科学家,Pandas 都是一个值得掌握的工具。希望以上介绍对你有所帮助!如果你有任何具体的问题或需要进一步的示例,请随时提问。

Pandas 查询引擎

本指南向您展示如何使用我们的PandasQueryEngine:使用llm将自然语言转换为Pandas python代码。

PandasQueryEngine的输入是一个Pandas数据框,输出是一个响应。LLM推断要执行的数据帧操作,以便检索结果。

警告:此工具提供对eval函数的LLM访问。可以在运行此工具的机器上执行任意代码。虽然对代码进行了某种程度的过滤,但不建议在没有大量沙箱或虚拟机的生产环境中使用该工具。

如果你在colab上打开这个Notebook,你可能需要安装LlamaIndex🦙。

pip install llama-index llama-index-experimental
pip install llama-index-core
pip install llama-index-llms-dashscope
import logging
import sys
from IPython.display import Markdown, displayimport pandas as pd
from llama_index.experimental.query_engine import PandasQueryEnginelogging.basicConfig(stream=sys.stdout, level=logging.INFO)
logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))

让我们从DataFrame开始

这里,让我们加载一个非常简单的包含城市和人口对的数据框架,并在其上运行PandasQueryEngine

通过设置verbose=True,我们可以看到中间生成的指令。

Settings.llm = DashScope(model_name=DashScopeGenerationModels.QWEN_TURBO, api_key="your-api-key", max_tokens=512,system_prompt="总是用中文回答"
)# 对一些样本数据进行测试
df = pd.DataFrame({"city": ["Toronto", "Tokyo", "Berlin"],"population": [2930000, 13960000, 3645000],}
)query_engine = PandasQueryEngine(df=df, verbose=True)response = query_engine.query("人口最多的城市是哪个?",
)
print("--------------------------------------")
print(str(response))
print("########################################")
# 获取pandas python 指令
print(response.metadata["pandas_instruction_str"])

Pandas Instructions:
df.loc[df['population'].idxmax(), 'city']
Pandas Output: Tokyo

Tokyo
########################################
df.loc[df[‘population’].idxmax(), ‘city’]

df.loc[df['population'].idxmax(), 'city']这行代码的作用是从DataFrame df 中找出人口 (population) 最多的城市 (city) 的名称。让我们分解一下这行代码来更好地理解它的功能:

  1. df['population'].idxmax():

    • 这部分代码用于找到 population 列中的最大值对应的索引。idxmax() 函数会返回该列中最大值所在的那一行的索引标签。
  2. df.loc[...]:

    • loc 是Pandas库中用于按标签访问数据的方法。它允许你通过指定行标签或列标签来选择数据。
  3. df.loc[df['population'].idxmax(), 'city']:

    • 首先,df['population'].idxmax() 找到了 population 列中最大值所在的行的索引。
    • 然后,df.loc[...] 使用这个索引来选择对应的整行数据。
    • 最后,'city' 参数告诉 loc 方法只返回这一行中 city 列的值。

综上所述,这段代码的结果就是返回 DataFrame dfpopulation 列的最大值对应的城市名。如果 df 是一个包含不同城市及其人口数据的表格,那么这段代码将告诉你哪个城市的人口最多,并给出这个城市的名称。

我们还可以采取使用 LLM 合成响应的步骤。

query_engine = PandasQueryEngine(df=df, verbose=True, synthesize_response=True)
response = query_engine.query("人口最多的城市是哪个?同时给出城市和人口",
)
print(str(response))
print(response.metadata["pandas_instruction_str"])

Pandas Instructions:
df.loc[df['population'].idxmax(), ['city', 'population']]
Pandas Output: city Tokyo
population 13960000
Name: 1, dtype: object
city Tokyo
population 13960000
Name: 1, dtype: object
df.loc[df[‘population’].idxmax(), [‘city’, ‘population’]]

df.loc[df['population'].idxmax(), ['city', 'population']] 这行代码的作用是从DataFrame df 中找出人口 (population) 最多的城市 (city) 的名称及其人口数。['city', 'population'] 参数告诉 loc 方法只返回这一行中 citypopulation 列的值。

分析泰坦尼克号数据集

泰坦尼克号数据集是入门级机器学习中最受欢迎的表格数据集之一
来源: https://www.kaggle.com/c/titanic

下载数据

https://raw.githubusercontent.com/jerryjliu/llama_index/main/docs/docs/examples/data/csv/titanic_train.csv

保存为 titanic_train.csv 文件,放到代码根目录文件夹下

df = pd.read_csv("./titanic_train.csv")
query_engine = PandasQueryEngine(df=df, verbose=True)
response = query_engine.query("What is the correlation between survival and age?",
)

Pandas Instructions:
df['survived'].corr(df['age'])
Pandas Output: -0.07722109457217755
df[‘survived’].corr(df[‘age’])
-0.07722109457217755

  • df['survived'].corr(df['age']) 这行代码是用来计算DataFrame df 中的两个列 'survived''age' 之间的皮尔逊相关系数(Pearson correlation coefficient)。这里假设 df 是一个使用Pandas库创建的数据表。
    皮尔逊相关系数衡量的是两个变量之间的线性关系强度和方向。其值范围从 -1 到 +1:
    • 如果相关系数接近 +1,这意味着两个变量之间存在强正相关关系,即一个变量增加时另一个变量也倾向于增加。

    • 如果相关系数接近 -1,这意味着两个变量之间存在强负相关关系,即一个变量增加时另一个变量倾向于减少。

    • 如果相关系数接近 0,则表明两个变量之间没有明显的线性关系。

      在你的例子中,'survived' 可能是一个二进制变量(例如,生存状态,1 表示生还,0 表示未生还),而 'age' 是乘客的年龄。计算这两个变量的相关系数可以帮助了解年龄是否与生还率有线性关系,以及这种关系的方向是正向还是负向。

其他步骤

分析/修改提示

让我们看看提示!

from llama_index.core import PromptTemplate
query_engine = PandasQueryEngine(df=df, verbose=True)
prompts = query_engine.get_prompts()
print(prompts["pandas_prompt"].template)

You are working with a pandas dataframe in Python. The name of the
dataframe is df. This is the result of print(df.head()): {df_str}

Follow these instructions: {instruction_str} Query: {query_str}

Expression: print(prompts[“response_synthesis_prompt”].template) Given
an input question, synthesize a response from the query results.
Query: {query_str}

Pandas Instructions (optional): {pandas_instructions}

Pandas Output: {pandas_output}

Response:

您也可以更新提示:

new_prompt = PromptTemplate("""\
You are working with a pandas dataframe in Python.
The name of the dataframe is `df`.
This is the result of `print(df.head())`:
{df_str}Follow these instructions:
{instruction_str}
Query: {query_str}Expression: """
)query_engine.update_prompts({"pandas_prompt": new_prompt})

这是指令字符串(您可以通过在初始化时传入来自定义)instruction_str

instruction_str = """\
1. Convert the query to executable Python code using Pandas.
2. The final line of code should be a Python expression that can be called with the `eval()` function.
3. The code should represent a solution to the query.
4. PRINT ONLY THE EXPRESSION.
5. Do not quote the expression.
"""

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/882131.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大模型生图安全疫苗注入赛题解析(DataWhale组队学习)

引言 大家好&#xff0c;我是GISer Liu&#x1f601;&#xff0c;一名热爱AI技术的GIS开发者。本系列文章是我跟随DataWhale 2024年10月实践赛的大模型生图安全疫苗注入赛道&#xff1b;本文主要整理本次赛事的基本流程和优化方法。&#x1f495;&#x1f495;&#x1f60a; 一…

IEC104规约的秘密之九----链路层和应用层

104规约从TCP往上&#xff0c;分成链路层和应用层。 如图&#xff0c;APCI就是链路层&#xff0c;ASDU的就是应用层 我们看到报文都是68打头的&#xff0c;因为应用层报文也要交给链路层发送&#xff0c;链路层增加了开头的6个字节再进行发送。 完全用于链路层的报文每帧都只有…

好用,易用,高效,稳定 基于opencv 的 图像模板匹配 - python 实现

在定位、搜索固定界面图块时&#xff0c;经常用到模板匹配&#xff0c;opencv自带的图像模板匹配好用&#xff0c;易用&#xff0c;高效&#xff0c;稳定&#xff0c;且有多种匹配计算方式。 具体示例如下&#xff1a; 模板图&#xff1a; 待搜索图&#xff1a; 具体实现代码…

FreeRTOS - 任务管理

在学习FreeRTOS过程中&#xff0c;结合韦东山-FreeRTOS手册和视频、野火-FreeRTOS内核实现与应用开发、及网上查找的其他资源&#xff0c;整理了该篇文章。如有内容理解不正确之处&#xff0c;欢迎大家指出&#xff0c;共同进步。 参考&#xff1a;https://rtos.100ask.net/zh/…

【C++刷题】力扣-#219-存在重复元素II

题目描述 给定一个整数数组 nums 和一个整数 k&#xff0c;判断数组中是否存在两个不同的索引 i 和 j 使得 nums[i] nums[j] 且 i! j。也就是说&#xff0c;不能有重复的元素。 示例 示例 1: 输入: nums [1,2,3,1], k 3 输出: true示例 2: 输入: nums [1,2,3,1,2,4], k …

SpringColoud GateWay 核心组件

优质博文&#xff1a;IT-BLOG-CN 【1】Route路由&#xff1a; Gateway的基本构建模块&#xff0c;它由ID、目标URL、断言集合和过滤器集合组成。如果聚合断言结果为真&#xff0c;则匹配到该路由。 Route路由-动态路由实现原理&#xff1a; 配置变化Apollo 服务地址实例变化…

H3C设备连接方式

Console线本地连接 协议Serial&#xff0c;接口com口&#xff0c;波特率9600&#xff08;设备管理器中查看com口&#xff09; 适用于设备初次调试 使用Telnet远程访问 适用于设备上架配置好后的维护管理 使用SSH远程访问 数据传输过程加密&#xff0c;安全的远程访问

洞察数字化营销的本质

数字化营销&#xff0c;即借助互联网、移动互联网、社交媒体等数字技术与渠道实现营销目标。涵盖市场调研、品牌推广、产品销售到客户服务全过程。 其特点显著。精准定位是一大优势&#xff0c;利用大数据分析和人工智能&#xff0c;深入了解客户需求、兴趣和行为&#xff0c;精…

AdmX_new

0x00前言 因为环境问题&#xff0c;此次靶场都放在vm上。都为NAT模式。 靶机地址: https://download.vulnhub.com/admx/AdmX_new.7z 需要找到两个flag文件。 0x01信息搜集 搜集IP 确认目标IP为172.16.8.131&#xff0c;进一步信息搜集 获取端口开放情况&#xff0c;版本信…

多模态大语言模型(MLLM)-Blip3/xGen-MM

论文链接&#xff1a;https://www.arxiv.org/abs/2408.08872 代码链接&#xff1a;https://github.com/salesforce/LAVIS/tree/xgen-mm 本次解读xGen-MM (BLIP-3): A Family of Open Large Multimodal Models 可以看作是 [1] Blip: Bootstrapping language-image pre-training…

TCP/IP 寻址

TCP/IP 寻址 概述 TCP/IP(传输控制协议/互联网协议)是一组用于数据网络的通信协议。它们定义了数据如何在网络上从一个设备传输到另一个设备。在TCP/IP网络中,每个设备都有一个唯一的地址,称为IP地址,用于标识网络上的设备。本文将深入探讨TCP/IP寻址的概念、类型、分配…

Lua脚本的原子性

Lua脚本之所以被认为是原子性的,主要源于Redis的内部实现机制和Lua脚本的执行方式。以下是对Lua脚本原子性的详细解释: 一、Redis的单线程模型 Redis是一个基于内存、可基于Key-Value等多种数据结构的存储系统,它使用单线程模型来处理客户端的请求。这意味着在任何给定的时…

Vue3中防止按钮重复点击的方式

本文列两种方式&#xff0c;推荐第一种&#xff0c;经过长时间测试第二种防止的还是会漏&#xff0c;这里也列一下 ①使用定时器&#xff08;推荐&#xff09; 判断3秒钟之内方法只能执行一次 <el-button click"handleClick" type"primary" :loading…

二叉树算法之二叉树遍历(前序、中序、后序、层次遍历)

二叉树遍历是指按照某种顺序访问二叉树的所有节点。常见的二叉树遍历方式包括前序遍历&#xff08;Preorder Traversal&#xff09;、中序遍历&#xff08;Inorder Traversal&#xff09;、后序遍历&#xff08;Postorder Traversal&#xff09;和层次遍历&#xff08;Level-or…

stm32 bootloader写法

bootloader写法&#xff1a; 假设app的起始地址&#xff1a;0x08020000&#xff0c;则bootloader的范围是0x0800,0000~0x0801,FFFF。 #define APP_ADDR 0x08020000 // 应用程序首地址定义 typedef void (*APP_FUNC)(void); // 函数指针类型定义 /*main函数中调用rum_app&#x…

Luogu P1528 切蛋糕 || SCOI2005 栅栏

假设最多能满足 x x x个人&#xff0c;那么这 x x x个人一定可以是按照每个人吃蛋糕的需求将他们从小到大排序后的前 x x x个人。&#xff08;有两个人他们吃蛋糕的需求分别为 x 1 x_1 x1​和 x 2 x_2 x2​&#xff0c;且 x 1 < x 2 x_1<x_2 x1​<x2​&#xff0c;如果…

【从零开始的LeetCode-算法】504. 七进制数

给定一个整数 num&#xff0c;将其转化为 7 进制&#xff0c;并以字符串形式输出。 示例 1: 输入: num 100 输出: "202"示例 2: 输入: num -7 输出: "-10"提示&#xff1a; -107 < num < 107 我的解答 class Solution {public String convertT…

大数据存储计算平台EasyMR:大数据集群动态扩缩容,快速提升集群服务能力

在当今的数据驱动时代&#xff0c;组织面临着数据量的爆炸性增长。为了有效管理和存储这些数据&#xff0c;许多组织依赖于 Hadoop 这样的分布式存储系统。Hadoop 集群通过在多个节点上存储数据的冗余副本&#xff0c;提供了高可靠性和可扩展性。然而&#xff0c;随着数据量的不…

【MySQL】提高篇—复杂查询:多表连接(INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN)

在关系数据库中&#xff0c;数据通常分散在多个表中。为了获取相关联的数据&#xff0c;需要使用表连接&#xff08;JOIN&#xff09;操作。 表连接允许我们在一个查询中结合多个表的数据&#xff0c;这在实际应用中非常重要。 例如&#xff0c;在一个电商系统中&#xff0c;…

如何更改MySQL的root密码

前言 在管理数据库时&#xff0c;有时可能会忘记MySQL的root用户密码或需要更改默认设置的密码。以下是在Windows环境下更改MySQL root密码的详细步骤。请注意&#xff0c;这些步骤适用于MySQL 5.7及以上版本&#xff1b;对于其他版本&#xff0c;请参考相应版本的文档。 准备…