Skip to main content
Glama

filter_rows

Remove or isolate rows in CSV files using specific conditions to refine datasets. Supports multiple criteria and modes for precise data filtering.

Instructions

Filter rows based on conditions.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
conditionsYes
modeNoand
session_idYes

Implementation Reference

  • Core handler function that implements the filter_rows tool logic. Applies multiple conditions using pandas boolean masks in AND/OR mode, updates the session's dataframe, records the operation, and returns filtering statistics.
    async def filter_rows( session_id: str, conditions: List[Dict[str, Any]], mode: str = "and", ctx: Context = None ) -> Dict[str, Any]: """ Filter rows based on conditions. Args: session_id: Session identifier conditions: List of filter conditions, each with: - column: Column name - operator: One of '==', '!=', '>', '<', '>=', '<=', 'contains', 'starts_with', 'ends_with', 'in', 'not_in', 'is_null', 'not_null' - value: Value to compare (not needed for is_null/not_null) mode: 'and' or 'or' to combine multiple conditions ctx: FastMCP context Returns: Dict with success status and filtered row count """ try: manager = get_session_manager() session = manager.get_session(session_id) if not session or session.df is None: return {"success": False, "error": "Invalid session or no data loaded"} df = session.df mask = pd.Series([True] * len(df)) for condition in conditions: column = condition.get("column") operator = condition.get("operator") value = condition.get("value") if column not in df.columns: return {"success": False, "error": f"Column '{column}' not found"} col_data = df[column] if operator == "==": condition_mask = col_data == value elif operator == "!=": condition_mask = col_data != value elif operator == ">": condition_mask = col_data > value elif operator == "<": condition_mask = col_data < value elif operator == ">=": condition_mask = col_data >= value elif operator == "<=": condition_mask = col_data <= value elif operator == "contains": condition_mask = col_data.astype(str).str.contains(str(value), na=False) elif operator == "starts_with": condition_mask = col_data.astype(str).str.startswith(str(value), na=False) elif operator == "ends_with": condition_mask = col_data.astype(str).str.endswith(str(value), na=False) elif operator == "in": condition_mask = col_data.isin(value if isinstance(value, list) else [value]) elif operator == "not_in": condition_mask = ~col_data.isin(value if isinstance(value, list) else [value]) elif operator == "is_null": condition_mask = col_data.isna() elif operator == "not_null": condition_mask = col_data.notna() else: return {"success": False, "error": f"Unknown operator: {operator}"} if mode == "and": mask = mask & condition_mask else: mask = mask | condition_mask session.df = df[mask].reset_index(drop=True) session.record_operation(OperationType.FILTER, { "conditions": conditions, "mode": mode, "rows_before": len(df), "rows_after": len(session.df) }) return { "success": True, "rows_before": len(df), "rows_after": len(session.df), "rows_filtered": len(df) - len(session.df) } except Exception as e: logger.error(f"Error filtering rows: {str(e)}") return {"success": False, "error": str(e)}
  • MCP tool registration using @mcp.tool decorator. This wrapper function delegates to the actual implementation in transformations.py.
    @mcp.tool async def filter_rows( session_id: str, conditions: List[Dict[str, Any]], mode: str = "and", ctx: Context = None ) -> Dict[str, Any]: """Filter rows based on conditions.""" return await _filter_rows(session_id, conditions, mode, ctx)

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/santoshray02/csv-editor'

If you have feedback or need assistance with the MCP directory API, please join our Discord server