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)