agentsclimarketplace

Data wrangler

Skill georgekhananaev/claude-skills-vault/.claude/skills/data-wrangler

A curated collection of high impact skills for Claude Code designed to supercharge the senior full stack workflow. This vault automates the repetitive parts of development like architectural reviews, TDD cycles, and PR management so you can stay in flow. It is a force multiplier for shipping clean, production ready code at scale. 🚀⚡️

Install
npx -y skills add georgekhananaev/claude-skills-vault --skill data-wrangler

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

What its author says it does

Copied from the file, not written here

Production-grade tabular data manipulation using pandas & openpyxl. This skill should be used when editing, creating, filtering, sorting, merging, pivoting, deduplicating, validating, or transforming CSV, Excel (xlsx/xls), JSON, Parquet, or TSV files. Supports 18 operations via CLI scripts, advanced Excel formatting (multi-sheet, freeze, auto-filter, validation, styling), and file-converter integration for format pipelines.

SKILL.md

9.7 KB, as published. Nobody here has run it

Data Wrangler

Manipulate tabular data (CSV, Excel, JSON, Parquet, TSV) w/ pandas-powered scripts. Two scripts cover all operations: data_wrangler.py for data ops, excel_toolkit.py for Excel-specific features.

When to Use

  • User asks to read, edit, filter, sort, or transform CSV/Excel/JSON/Parquet/TSV files
  • User asks to merge/join datasets, deduplicate, fill missing values, or validate data
  • User asks to create Excel workbooks w/ formatting, dropdowns, freeze panes, or multi-sheet
  • User asks to pivot, unpivot, group-by, aggregate, sample, or split datasets
  • User asks to add computed columns, rename columns, cast types, or apply formulas
  • User asks to convert between data formats (CSV -> Excel, JSON -> Parquet, etc.)
  • User asks to inspect/profile data structure, types, nulls, stats

Prerequisites

# Required
pip install pandas openpyxl

# Optional (per feature)
pip install pyarrow          # Parquet support
pip install xlrd             # Legacy .xls read
pip install pandasql         # SQL queries on DataFrames
pip install fastparquet      # Alternative Parquet engine

Quick Routing

TaskScriptCommand
Inspect/profile datadata_wrangler.pyinspect
Filter rowsdata_wrangler.pyfilter --where "expr"
Sort by columnsdata_wrangler.pysort --by Col --desc
Group & aggregatedata_wrangler.pygroup --by Col --agg "Col:func"
Merge/join filesdata_wrangler.pymerge f2 --on Key --how left
Pivot / unpivotdata_wrangler.pypivot --index/--unpivot
Remove duplicatesdata_wrangler.pydedupe --subset "Col"
Fill missing valuesdata_wrangler.pyfill --column Col --strategy mean
Drop cols/rowsdata_wrangler.pydrop --columns "A,B"
Rename columnsdata_wrangler.pyrename --map "old:new"
Cast typesdata_wrangler.pycast --column Col --dtype datetime
Computed columnsdata_wrangler.pyderive --formula "New = A + B"
Random sampledata_wrangler.pysample --n 100
Split by valuesdata_wrangler.pysplit --by Region
Validate rulesdata_wrangler.pyvalidate --rules rules.json
Apply formulasdata_wrangler.pyformula --expr "C=A+B"
Convert formatsdata_wrangler.pyconvert -o data.xlsx
SQL queriesdata_wrangler.pyquery --sql "SELECT..."
List Excel sheetsexcel_toolkit.pysheets
Extract sheetexcel_toolkit.pyextract --sheet Sales -o sales.csv
Combine -> xlsxexcel_toolkit.pycombine *.csv -o combined.xlsx
Format headersexcel_toolkit.pyformat --header-style bold,blue --autowidth
Freeze panesexcel_toolkit.pyfreeze --at B2
Auto-filterexcel_toolkit.pyautofilter
Dropdown validationexcel_toolkit.pyvalidate --column Status --values "Open,Closed"
Protect sheetexcel_toolkit.pyprotect --password secret
Create workbookexcel_toolkit.pycreate --columns "Name,Age" -o template.xlsx

Usage Patterns

Data Operations (data_wrangler.py)

All operations follow: python3 scripts/data_wrangler.py <op> <input> [options] [-o output]

# Inspect
python3 data_wrangler.py inspect sales.csv
python3 data_wrangler.py inspect data.xlsx --sheet "Q1 Sales" --nrows 1000

# Filter
python3 data_wrangler.py filter data.csv --where "Revenue > 10000" -o high_rev.csv
python3 data_wrangler.py filter data.csv --where 'Status == "active" and Age >= 25' -o active.csv

# Sort
python3 data_wrangler.py sort data.csv --by "Revenue,Name" --desc -o sorted.csv

# Group + Aggregate
python3 data_wrangler.py group data.csv --by Department --agg "Salary:mean,Salary:count,Revenue:sum" -o summary.csv

# Merge
python3 data_wrangler.py merge orders.csv customers.csv --on CustomerID --how left -o joined.csv

# Pivot
python3 data_wrangler.py pivot data.csv --index Name --columns Month --values Sales --aggfunc sum -o pivoted.csv

# Unpivot (melt)
python3 data_wrangler.py pivot wide.csv --index ID --unpivot --var-name Metric --value-name Value -o long.csv

# Deduplicate
python3 data_wrangler.py dedupe data.csv --subset "Email" --keep first -o clean.csv

# Fill nulls
python3 data_wrangler.py fill data.csv --column "Revenue,Profit" --strategy mean -o filled.csv

# Drop columns
python3 data_wrangler.py drop data.csv --columns "TempCol,Notes" -o trimmed.csv
python3 data_wrangler.py drop data.csv --null-threshold 0.5 -o cleaned.csv

# Rename
python3 data_wrangler.py rename data.csv --map "old_name:new_name,col2:Column2" -o renamed.csv
python3 data_wrangler.py rename data.csv --snake -o snake_case.csv

# Cast types
python3 data_wrangler.py cast data.csv --column Date --dtype datetime --date-format "%Y-%m-%d" -o typed.csv

# Computed columns
python3 data_wrangler.py derive data.csv --formula "Profit = Revenue - Cost" -o enriched.csv

# Sample
python3 data_wrangler.py sample large.csv --n 500 --seed 42 -o sample.csv

# Split by value
python3 data_wrangler.py split data.csv --by Region --output-dir ./by_region/

# Validate
python3 data_wrangler.py validate data.csv --rules validation_rules.json -o report.json

# Formula
python3 data_wrangler.py formula data.xlsx --expr "Total=Price*Quantity" -o calculated.xlsx

# Convert
python3 data_wrangler.py convert data.csv -o data.xlsx
python3 data_wrangler.py convert data.xlsx -o data.json
python3 data_wrangler.py convert data.json -o data.parquet

# SQL query
python3 data_wrangler.py query data.csv --sql "SELECT Name, AVG(Salary) FROM df WHERE Dept='Eng' GROUP BY Name"

Excel Operations (excel_toolkit.py)

All operations follow: python3 scripts/excel_toolkit.py <op> <input> [options] [-o output]

# List sheets
python3 excel_toolkit.py sheets workbook.xlsx

# Extract sheet
python3 excel_toolkit.py extract workbook.xlsx --sheet "Sales Q1" -o sales_q1.csv

# Combine multiple files into multi-sheet xlsx
python3 excel_toolkit.py combine sales.csv inventory.csv orders.csv -o report.xlsx

# Format
python3 excel_toolkit.py format data.xlsx --header-style bold,blue --autowidth --zebra -o styled.xlsx

# Freeze panes
python3 excel_toolkit.py freeze data.xlsx --at B2 -o frozen.xlsx

# Auto-filter
python3 excel_toolkit.py autofilter data.xlsx -o filtered.xlsx

# Dropdown validation
python3 excel_toolkit.py validate data.xlsx --column Status --values "Open,Closed,Pending" -o validated.xlsx

# Protect
python3 excel_toolkit.py protect data.xlsx --password mypass -o protected.xlsx

# Create template
python3 excel_toolkit.py create --columns "Name,Email,Department,Start Date,Salary" -o template.xlsx

Validation Rules Format

Create a JSON rules file for validate:

{
  "rules": [
    {"column": "Email", "type": "not_null"},
    {"column": "Email", "type": "pattern", "regex": "^[^@]+@[^@]+\\.[^@]+$"},
    {"column": "ID", "type": "unique"},
    {"column": "Age", "type": "range", "min": 0, "max": 150},
    {"column": "Status", "type": "enum", "values": ["active", "inactive", "pending"]}
  ]
}

Rule types: not_null, unique, range (min/max), pattern (regex), enum (allowed values).

Fill Strategies

StrategyBehavior
meanFill w/ column mean (numeric)
medianFill w/ column median (numeric)
modeFill w/ most frequent value
zeroFill w/ 0
emptyFill w/ empty string
ffillForward fill (carry last value)
bfillBackward fill
dropDrop rows w/ nulls in column
value:<v>Fill w/ specific value

Supported Formats

FormatReadWriteDependency
CSVYY(builtin)
TSVYY(builtin)
XLSXYYopenpyxl
XLSYNxlrd
JSONYY(builtin)
JSONLYY(builtin)
ParquetYYpyarrow

Integration w/ file-converter

Pipeline data between skills:

# 1. Convert YAML -> CSV (file-converter), then wrangle
python3 .claude/skills/file-converter/scripts/csv_json_yaml.py data.yaml data.csv
python3 .claude/skills/data-wrangler/scripts/data_wrangler.py filter data.csv --where "Status == 'active'" -o filtered.csv

# 2. Wrangle, then convert to PDF report
python3 data_wrangler.py group data.csv --by Dept --agg "Salary:mean,count" -o summary.csv
# (Use file-converter to render summary as markdown -> PDF)

# 3. Excel -> JSON -> YAML pipeline
python3 data_wrangler.py convert data.xlsx -o data.json
python3 .claude/skills/file-converter/scripts/csv_json_yaml.py data.json data.yaml

Pandas Query Syntax Reference

Filter expressions use pandas query syntax:

PatternExample
ComparisonAge > 30, Revenue >= 10000
EqualityStatus == "active", Region != "East"
String containsName.str.contains("Smith")
Multiple conditionsAge > 25 and Status == "active"
OR conditionsRegion == "East" or Region == "West"
IN listStatus in ["active", "pending"]
NOT INStatus not in ["closed", "archived"]
Null checkRevenue.notna(), Email.isna()
BetweenAge >= 18 and Age <= 65

Aggregation Functions

Available for group --agg and pivot --aggfunc:

sum, mean, median, min, max, count, std, var, first, last, nunique

Spec format: "Column:function" — multiple: "Salary:mean,Salary:count,Revenue:sum"

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.