New to Claude Skills? Learn how to install them →

Pjeffallan on GitHub

Pandas Pro

Free

Streamline your pandas DataFrame operations for better performance.

Get this skill

Free · Opens the source repo

What Pandas Pro does

Pandas Pro is designed for developers and data analysts who need to efficiently manipulate and analyze data using pandas DataFrames. This skill provides a structured approach to data operations, emphasizing best practices for data cleaning, aggregation, merging, and performance optimization. By following the core workflow, users can assess their data structure, design transformations, implement efficient operations, validate results, and optimize for performance, ensuring that their data workflows are both effective and scalable.

The skill includes a comprehensive reference guide that covers various aspects of DataFrame operations, including data cleaning techniques for handling missing values and duplicates, aggregation methods using GroupBy, and strategies for merging and joining DataFrames. Each reference topic is tailored to specific tasks, making it easy to load the relevant guidance when needed. This targeted approach helps users quickly find the information they require to solve their data manipulation challenges.

In addition to the reference materials, Pandas Pro emphasizes the importance of using vectorized operations over traditional row-by-row iterations. This not only improves performance but also enhances code readability and maintainability. The skill provides numerous code patterns illustrating best practices, such as safe subsetting, group aggregation, and time series resampling, allowing users to adopt these techniques in their own projects.

Overall, Pandas Pro is ideal for anyone working extensively with pandas who seeks to improve their data manipulation skills and ensure they are following industry-standard practices. Whether you are cleaning data, performing complex aggregations, or optimizing large datasets, this skill equips you with the tools and knowledge needed to succeed.

When to use it

Use Pandas Pro when you need to perform complex DataFrame operations, such as data cleaning, merging, or time series analysis, while ensuring optimal performance.

When not to use it

This skill may not be suitable for users who are unfamiliar with pandas or those who require basic data manipulation without the need for performance optimization.

What you can build with it

Data Cleaning for Analysis

Use Pandas Pro to handle missing values and duplicates efficiently before performing any analysis.

Time Series Data Resampling

Leverage the skill to resample and aggregate time series data for better insights and reporting.

Merging Multiple DataFrames

Utilize Pandas Pro to merge and join DataFrames on multiple keys while validating the integrity of the data.

How to install Pandas Pro

View source

1. Install with the skills CLI

npx skills add jeffallan/claude-skills/pandas-pro --agent claude-code

2. Or install it manually

Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.

Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs

Inside SKILL.md

Written by jeffallan

Pandas Pro

Expert pandas developer specializing in efficient data manipulation, analysis, and transformation workflows with production-grade performance patterns.

Core Workflow

  1. Assess data structure — Examine dtypes, memory usage, missing values, data quality:
    print(df.dtypes)
    print(df.memory_usage(deep=True).sum() / 1e6, "MB")
    print(df.isna().sum())
    print(df.describe(include="all"))
    
  2. Design transformation — Plan vectorized operations, avoid loops, identify indexing strategy
  3. Implement efficiently — Use vectorized methods, method chaining, proper indexing
  4. Validate results — Check dtypes, shapes, null counts, and row counts:
    assert result.shape[0] == expected_rows, f"Row count mismatch: {result.shape[0]}"
    assert result.isna().sum().sum() == 0, "Unexpected nulls after transform"
    assert set(result.columns) == expected_cols
    
  5. Optimize — Profile memory, apply categorical types, use chunking if needed

Reference Guide

Load detailed guidance based on context:

TopicReferenceLoad When
DataFrame Operationsreferences/dataframe-operations.mdIndexing, selection, filtering, sorting
Data Cleaningreferences/data-cleaning.mdMissing values, duplicates, type conversion
Aggregation & GroupByreferences/aggregation-groupby.mdGroupBy, pivot, crosstab, aggregation
Merging & Joiningreferences/merging-joining.mdMerge, join, concat, combine strategies
Performance Optimizationreferences/performance-optimization.mdMemory usage, vectorization, chunking

Code Patterns

Vectorized Operations (before/after)

# ❌ AVOID: row-by-row iteration
for i, row in df.iterrows():
    df.at[i, 'tax'] = row['price'] * 0.2

# ✅ USE: vectorized assignment
df['tax'] = df['price'] * 0.2

Safe Subsetting with .copy()

# ❌ AVOID: chained indexing triggers SettingWithCopyWarning
df['A']['B'] = 1

# ✅ USE: .loc[] with explicit copy when mutating a subset
subset = df.loc[df['status'] == 'active', :].copy()
subset['score'] = subset['score'].fillna(0)

GroupBy Aggregation

summary = (
    df.groupby(['region', 'category'], observed=True)
    .agg(
        total_sales=('revenue', 'sum'),
        avg_price=('price', 'mean'),
        order_count=('order_id', 'nunique'),
    )
    .reset_index()
)

Merge with Validation

merged = pd.merge(
    left_df, right_df,
    on=['customer_id', 'date'],
    how='left',
    validate='m:1',          # asserts right key is unique
    indicator=True,
)
unmatched = merged[merged['_merge'] != 'both']
print(f"Unmatched rows: {len(unmatched)}")
merged.drop(columns=['_merge'], inplace=True)

Missing Value Handling

# Forward-fill then interpolate numeric gaps
df['price'] = df['price'].ffill().interpolate(method='linear')

# Fill categoricals with mode, numerics with median
for col in df.select_dtypes(include='object'):
    df[col] = df[col].fillna(df[col].mode()[0])
for col in df.select_dtypes(include='number'):
    df[col] = df[col].fillna(df[col].median())

Time Series Resampling

daily = (
    df.set_index('timestamp')
    .resample('D')
    .agg({'revenue': 'sum', 'sessions': 'count'})
    .fillna(0)
)

Pivot Table

pivot = df.pivot_table(
    values='revenue',
    index='region',
    columns='product_line',
    aggfunc='sum',
    fill_value=0,
    margins=True,
)

Memory Optimization

# Downcast numerics and convert low-cardinality strings to categorical
df['category'] = df['category'].astype('category')
df['count'] = pd.to_numeric(df['count'], downcast='integer')
df['score'] = pd.to_numeric(df['score'], downcast='float')
print(df.memory_usage(deep=True).sum() / 1e6, "MB after optimization")

Constraints

MUST DO

  • Use vectorized operations instead of loops
  • Set appropriate dtypes (categorical for low-cardinality strings)
  • Check memory usage with .memory_usage(deep=True)
  • Handle missing values explicitly (don't silently drop)
  • Use method chaining for readability
  • Preserve index integrity through operations
  • Validate data quality before and after transformations
  • Use .copy() when modifying subsets to avoid SettingWithCopyWarning

MUST NOT DO

  • Iterate over DataFrame rows with .iterrows() unless absolutely necessary
  • Use chained indexing (df['A']['B']) — use .loc[] or .iloc[]
  • Ignore SettingWithCopyWarning messages
  • Load entire large datasets without chunking
  • Use deprecated methods (.ix, .append() — use pd.concat())
  • Convert to Python lists for operations possible in pandas
  • Assume data is clean without validation

Output Templates

When implementing pandas solutions, provide:

  1. Code with vectorized operations and proper indexing
  2. Comments explaining complex transformations
  3. Memory/performance considerations if dataset is large
  4. Data validation checks (dtypes, nulls, shapes)

Documentation

Frequently asked questions about Pandas Pro

Similar skills