# Airow
**AI-powered DataFrame processing made simple**
Airow is a Python library that combines the power of pandas DataFrames with AI models to process structured data at scale. Built on top of `pydantic-ai`, it provides type-safe, async processing of DataFrames using any AI model.
## Features
- 🚀 **Async processing** with batch support for high performance
- 🔒 **Type-safe outputs** using Pydantic models
- 📊 **Progress tracking** with built-in progress bars
- 🔄 **Automatic retries** with configurable retry logic
- 🤖 **Flexible AI models** - works with OpenAI, Ollama, Anthropic, and more
- ⚡ **Parallel processing** within batches for maximum throughput
- 📝 **Structured outputs** with defined schemas and validation
## Installation
```bash
# Using pip
pip install airow
# Using uv (recommended)
uv add airow
# Using conda
conda install -c conda-forge airow
```
## Quick Start
```python
import pandas as pd
from pydantic_ai.models.openai import OpenAIChatModel
from pydantic_ai.providers.ollama import OllamaProvider
from airow import Airow, OutputColumn
import asyncio
async def main():
# Setup your AI model
model = OpenAIChatModel(
model_name="llama3.2:latest",
provider=OllamaProvider(base_url="http://localhost:11434/v1"),
)
# Create Airow instance
airow = Airow(
model=model,
system_prompt="You are an expert in wine tasting and selection.",
)
# Load your data
df = pd.read_csv("wine_data.csv")
output_columns = [
OutputColumn(name="sentiment", type=str, description="Positive, negative, or neutral sentiment"),
OutputColumn(name="confidence", type=float, description="Confidence score between 0 and 1"),
OutputColumn(name="keywords", type=list, description="List of key terms extracted"),
]
# Process with AI
result_df = await airow.run(
df,
prompt="Analyze the wine description and provide sentiment analysis, confidence score, and extract key terms.",
input_columns=["description"],
output_columns=output_columns,
show_progress=True,
)
print(result_df.head())
if __name__ == "__main__":
asyncio.run(main())
```
Raw data
{
"_id": null,
"home_page": null,
"name": "airow",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.10",
"maintainer_email": "Dmitrii K <dmitriik@protonmail.com>",
"keywords": "ai, ai-agent, dataframe, pandas, pydantic-ai, async, data-processing",
"author": null,
"author_email": "Dmitrii K <dmitriik@protonmail.com>",
"download_url": "https://files.pythonhosted.org/packages/52/bc/39832cf6b735013a8d8cc2e73ece98699e9d7280f55a16ee152747e67b13/airow-0.1.0a2.tar.gz",
"platform": null,
"description": "# Airow\n\n**AI-powered DataFrame processing made simple**\n\nAirow is a Python library that combines the power of pandas DataFrames with AI models to process structured data at scale. Built on top of `pydantic-ai`, it provides type-safe, async processing of DataFrames using any AI model.\n\n## Features\n\n- \ud83d\ude80 **Async processing** with batch support for high performance\n- \ud83d\udd12 **Type-safe outputs** using Pydantic models\n- \ud83d\udcca **Progress tracking** with built-in progress bars\n- \ud83d\udd04 **Automatic retries** with configurable retry logic\n- \ud83e\udd16 **Flexible AI models** - works with OpenAI, Ollama, Anthropic, and more\n- \u26a1 **Parallel processing** within batches for maximum throughput\n- \ud83d\udcdd **Structured outputs** with defined schemas and validation\n\n## Installation\n\n```bash\n# Using pip\npip install airow\n\n# Using uv (recommended)\nuv add airow\n\n# Using conda\nconda install -c conda-forge airow\n```\n\n## Quick Start\n\n```python\nimport pandas as pd\nfrom pydantic_ai.models.openai import OpenAIChatModel\nfrom pydantic_ai.providers.ollama import OllamaProvider\nfrom airow import Airow, OutputColumn\nimport asyncio\n\nasync def main():\n # Setup your AI model\n model = OpenAIChatModel(\n model_name=\"llama3.2:latest\",\n provider=OllamaProvider(base_url=\"http://localhost:11434/v1\"),\n )\n \n # Create Airow instance\n airow = Airow(\n model=model,\n system_prompt=\"You are an expert in wine tasting and selection.\",\n )\n \n # Load your data\n df = pd.read_csv(\"wine_data.csv\")\n\n output_columns = [\n OutputColumn(name=\"sentiment\", type=str, description=\"Positive, negative, or neutral sentiment\"),\n OutputColumn(name=\"confidence\", type=float, description=\"Confidence score between 0 and 1\"),\n OutputColumn(name=\"keywords\", type=list, description=\"List of key terms extracted\"),\n ]\n \n # Process with AI\n result_df = await airow.run(\n df,\n prompt=\"Analyze the wine description and provide sentiment analysis, confidence score, and extract key terms.\",\n input_columns=[\"description\"],\n output_columns=output_columns,\n show_progress=True,\n )\n \n print(result_df.head())\n\nif __name__ == \"__main__\":\n asyncio.run(main())\n```\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "AI-powered DataFrame processing made simple",
"version": "0.1.0a2",
"project_urls": {
"Bug Tracker": "https://github.com/dmitriiweb/airow/issues",
"Documentation": "https://github.com/dmitriiweb/airow",
"Homepage": "https://github.com/dmitriiweb/airow",
"Repository": "https://github.com/dmitriiweb/airow"
},
"split_keywords": [
"ai",
" ai-agent",
" dataframe",
" pandas",
" pydantic-ai",
" async",
" data-processing"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "39e17c43e1b5fb13e66eacb19f66fb4fd6716b33d50181b38a4dc006a65fa0c2",
"md5": "2962acab9e018bacadf400bb0b15dbec",
"sha256": "6713b18bfdb28887abe4b8de21c684986703e67e87b7119f21e97fdfa753c397"
},
"downloads": -1,
"filename": "airow-0.1.0a2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "2962acab9e018bacadf400bb0b15dbec",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.10",
"size": 6558,
"upload_time": "2025-09-06T23:22:17",
"upload_time_iso_8601": "2025-09-06T23:22:17.753346Z",
"url": "https://files.pythonhosted.org/packages/39/e1/7c43e1b5fb13e66eacb19f66fb4fd6716b33d50181b38a4dc006a65fa0c2/airow-0.1.0a2-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "52bc39832cf6b735013a8d8cc2e73ece98699e9d7280f55a16ee152747e67b13",
"md5": "742c775f7422b9fdc3678ee74ba7ae84",
"sha256": "b20bfaa5c7b9e5148fb694ac0688f877fd7907f8a704888791f45013eeabf206"
},
"downloads": -1,
"filename": "airow-0.1.0a2.tar.gz",
"has_sig": false,
"md5_digest": "742c775f7422b9fdc3678ee74ba7ae84",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10",
"size": 7173,
"upload_time": "2025-09-06T23:22:19",
"upload_time_iso_8601": "2025-09-06T23:22:19.086322Z",
"url": "https://files.pythonhosted.org/packages/52/bc/39832cf6b735013a8d8cc2e73ece98699e9d7280f55a16ee152747e67b13/airow-0.1.0a2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-09-06 23:22:19",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "dmitriiweb",
"github_project": "airow",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "airow"
}