explaingit

saulpw/visidata

9,084PythonAudience · dataComplexity · 2/5LicenseSetup · easy

TLDR

A keyboard-driven terminal tool for exploring and editing spreadsheet data, open CSV, JSON, Excel, and more instantly in any terminal, then sort, filter, join, and transform rows without a GUI.

Mindmap

mindmap
  root((VisiData))
    What it does
      Terminal spreadsheet
      Data exploration
      File editing
    Supported formats
      CSV and TSV
      JSON
      Excel
      HDF5
    Features
      Sort and filter
      Frequency tables
      Multi-sheet joins
      Python expressions
    Setup
      pip install
      SSH friendly
      No GUI needed
Click or tap to explore — scroll the page freely

Code map

Detail Auto

An interactive map of this repo's files and how they connect — its source is parsed live in your browser. Click Visualize to build it.

filefunction / class

Things people build with this

USE CASE 1

Quickly explore a large CSV file on a remote server over SSH without downloading it or opening a spreadsheet app.

USE CASE 2

Build a frequency table from a data column to see the distribution of unique values with a simple histogram.

USE CASE 3

Join two data files on a shared key column using inner, outer, full, or difference joins entirely in the terminal.

USE CASE 4

Add a computed column using a Python expression and save the result as a new CSV file.

Tech stack

Python

Getting it running

Difficulty · easy Time to first run · 5min

Optional pip packages unlock Excel and HDF5 support, Google Sheets integration requires additional auth setup.

Free to use and share, but if you distribute software built with VisiData you must make your source code available under the same GPL v3 terms.

In plain English

VisiData is a terminal-based tool for exploring spreadsheet-style data. It runs entirely in the command line, so anyone with Python 3 installed on a remote server can use it over a plain SSH connection. There is no graphical interface to install or configure. You open a file and immediately see it laid out in rows and columns, browsable with keyboard shortcuts. The tool opens CSV, TSV, JSON, Excel, and HDF5 files. Large files start showing their first rows right away rather than waiting for the entire file to load. From there you can sort columns, filter rows using regular expressions, edit cell contents, assign a data type (integer, float, string, or date) to a column, and add new computed columns using Python expressions. You can also join multiple sheets together using inner, outer, full, or difference joins, matching rows by whichever columns you mark as key columns. VisiData organizes work into sheets. One sheet might be the file you opened. Another sheet might be a frequency table showing how many times each unique value appears in a column, complete with a simple histogram. There are meta-sheets for managing all open sheets, viewing columns, changing display options, and inspecting errors or background threads. Navigating between these uses the same keyboard-driven interface throughout. Saving is straightforward: press Ctrl-S and choose a filename with a .csv or .tsv extension. Edits made to joined sheets flow back to the original source sheets automatically. Installation is a single pip command. Optional Python packages add support for Excel files, HDF5 files, and Google Sheets. The tool is released under the GPLv3 license.

Copy-paste prompts

Prompt 1
I have a large CSV on a remote server. Show me the VisiData keyboard shortcuts to open it, sort by a column, and filter rows by a regex.
Prompt 2
Using VisiData, how do I create a frequency table for a column to see how often each unique value appears?
Prompt 3
I have two CSV files I want to join on a shared ID column. Walk me through doing an inner join in VisiData.
Prompt 4
How do I add a computed column in VisiData using a Python expression, then save the full result as a new CSV file?
Open on GitHub → Explain another repo

← saulpw on gitmyhub — every repo by this author, as a profile.

Verify against the repo before relying on details.