Columnist logo
ColumnistClaude skill by Dude Lemon

Data profiling for any CSV, before you trust it.

Columnist is a data profiling and data quality check skill for Claude. Before you analyse, import or migrate a CSV, TSV or exported sheet, a script reads every row and reports each column’s real type, blanks, distinct and top values, ranges and outliers, stray spaces, values that do not fit, mixed date formats and inconsistent spellings, plus duplicate and broken rows. Claude turns that into a short report, and cleans a copy with a log of every change when you ask.

Free, MIT licence. Python 3.8+.

Columnist profile.py on customers.csv: a broken row, a duplicate, stray spaces, an invalid email, mixed date formats, a placeholder and inconsistent country codes
At a glanceClaude skillcolumnist@dudelemon2 filesPython 3.8+

01See it work

Columnist, in real use.

3 screens from real runs of Columnist. Every value shown is what the tool returned; click a screen to open it full size.

Columnist profile.py on customers.csv: a broken row, a duplicate, stray spaces, an invalid email, mixed date formats, a placeholder and inconsistent country codes
A data quality check of every row before you trust the file

02How it works

Profile first, clean only what you agree.

The script reads every row; Claude turns the numbers into a short report; nothing changes until you choose the rules, and then only in a copy.

  1. 01ReadEncoding and delimiter detected, then every row read, large files streamed.scripts/profile.py
  2. 02ProfileEach column's real type, blanks, ranges, outliers, spellings and date formats.
  3. 03ReportThe problems that would break an import first, with counts and masked examples.
  4. 04Clean a copyOnly the agreed rules, into a new file, with a log row for every changed value.

03What it checks

Data profiling, column by column.

These are the checks profile.py runs on every column and on the file as a whole.

CheckWhat it finds
Real typeInteger, decimal, date, email, URL, boolean or text, from the values, not the header. Codes with leading zeros are kept as text.
Blanks and placeholdersEmpty cells, and stand-ins such as N/A, null, none and dashes
Distinct and top valuesHow many different values, and the most common ones
Ranges and outliersMinimum, maximum, median, and values far outside the rest
Stray spacesValues with leading or trailing spaces
Values that do not fitAn email without a domain ending in an email column, text in a number column
Mixed date ordersDay-first and month-first dates in the same column
Inconsistent spellingsThe same value written different ways, such as MU and mu
Duplicate and broken rowsExact repeats, and rows with the wrong number of fields
Candidate keysColumns whose values are all present and unique

04Dates

Mixed date formats, and the ones to leave alone.

A date such as 03/01/2026 could be 3 January or 1 March. Columnist converts a date only when a day above 12 settles the order, and asks about the rest. From the real clean-up of a sample file:

ValueRead asWhy
13/02/20262026-02-13The first number is above 12, so the day comes first
02/13/20262026-02-13The second number is above 12, so the month comes first
03/01/2026Left as isBoth orders are possible; flagged for you to decide

05Clean-up

Duplicate rows and every other change, logged.

The change log from the same run. The original file was never touched; three values that needed a person's judgment were flagged instead of changed.

RowColumnBeforeAfterRule
3name'Tom Becker ''Tom Becker'Trim spaces
3countrymuMUOne spelling per code
4amountN/A(blank)Placeholder to blank
4signup13/02/20262026-02-13Day-first date (day above 12)
5signup02/13/20262026-02-13Month-first date (day above 12)
7(row)005, Aiko Tanaka, ...(removed)Exact duplicate of row 6
8zip(missing field)(blank)Pad a short row

06Install

Install Columnist.

Install Columnist in Claude Code from the Dude Lemon marketplace, or download it for the Claude apps. Its script needs Python 3.8+.

Inside Claude Code2 commands, in order
/plugin marketplace add https://plugins.dudelemon.cloud/marketplace.json/plugin install columnist@dudelemon

Claude uses the skill when a task matches its description. You can also call it directly with /columnist:columnist.

07Inside

What is in the skill folder.

SKILL.md
The profile, report and clean workflow, and its rules: never overwrite the original, log every change, keep identifiers as text, flag outliers instead of deleting them.
scripts/profile.py
Detects encoding and delimiter, reads every row, and profiles each column and the file as a whole. Text or JSON output; Excel sheets with pandas installed.

08Ask in your own words

Say what you need. Columnist does the exact part.

Claude reaches for Columnist when a request matches it. You can also ask for it by name.

  • Profile this CSV before I import it into our CRM.
  • Clean the customer export: trim spaces, fix country codes, and keep a log.
  • Which column could be the unique key in this file?

FAQ

Columnist, answered

Anything we have not answered here, ask us directly. A senior engineer replies.

How large a file can it handle?

The script streams every row. Distinct values and duplicate detection are tracked up to large caps (100,000 distinct values per column and 2 million rows for duplicates), and the report says when a cap was reached.

Will it change my data?

Only when you ask, only by rules you agree, and always into a new file with a change log row for every edited value. The original is never overwritten.

What about personal data?

The skill reports counts and masked examples rather than pasting rows of names, emails or phone numbers into the conversation.

Is Columnist free?

Yes. Columnist is free and MIT licensed.

How do I install Columnist?

In Claude Code run /plugin marketplace add https://plugins.dudelemon.cloud/marketplace.json, then /plugin install columnist@dudelemon. In the Claude apps, download https://plugins.dudelemon.cloud/skills/columnist.zip and upload it under Customize, Skills.

Can Columnist read Excel files?

Yes, when pandas and openpyxl are installed: pass --sheet with the sheet name. CSV, TSV and other delimited files need nothing beyond Python.