Spaces:
Sleeping
Sleeping
File size: 2,126 Bytes
9333f04 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
import pandas as pd
from typing import List, Dict, Any
from langchain.tools import BaseTool
class SpreadsheetParserTool(BaseTool):
name = "spreadsheet_parser"
description = "Analyse un fichier Excel et extrait des informations spécifiques"
def _run(self, file_path: str, query: str) -> str:
"""Analyse un fichier Excel et répond à une requête spécifique"""
try:
# Lire le fichier Excel
df = pd.read_excel(file_path)
# Analyser la requête pour déterminer l'action à effectuer
if "somme" in query.lower() or "total" in query.lower():
# Trouver les colonnes numériques
numeric_cols = df.select_dtypes(include=['number']).columns
if len(numeric_cols) > 0:
return f"Somme des colonnes numériques:\n{df[numeric_cols].sum().to_string()}"
else:
return "Aucune colonne numérique trouvée dans le fichier"
elif "moyenne" in query.lower() or "average" in query.lower():
numeric_cols = df.select_dtypes(include=['number']).columns
if len(numeric_cols) > 0:
return f"Moyenne des colonnes numériques:\n{df[numeric_cols].mean().to_string()}"
else:
return "Aucune colonne numérique trouvée dans le fichier"
elif "premières lignes" in query.lower() or "first rows" in query.lower():
return f"Premières lignes du fichier:\n{df.head().to_string()}"
else:
# Par défaut, retourner un résumé du fichier
return f"Résumé du fichier:\nNombre de lignes: {len(df)}\nColonnes: {', '.join(df.columns)}\nTypes de données:\n{df.dtypes.to_string()}"
except Exception as e:
return f"Erreur lors de l'analyse du fichier Excel: {str(e)}"
async def _arun(self, file_path: str, query: str) -> str:
"""Version asynchrone de l'outil"""
return self._run(file_path, query) |