Skip to content

Repository files navigation

datascroller - data scrolling in the terminal!

Welcome to the datascroller project! While IDEs and notebooks are excellent for interactive data exploration, there will always be some of us who prefer to stay in the terminal. For exploring Pandas data frames, that meant painstakingly tedious use of .iloc, until now...

See datascroller in action on YouTube:

datascroller

CircleCI Build Status

baogorek

Installation

via pip

pip install datascroller

Usage

A quick demo

In a command line environment where datascroller is installed, run scroll_demo and refer to the "Keys" Section below. Press "q" to quit.

The file scroller binary –– supports CSVs with any delimiter and parquet files

In a command line environment where datascroller is installed, run scroll <path to your file> and refer to the "Keys" Section for navigation. Press "q" to quit.

Within Python or iPython

Import the scroll function from the datascroller module.

importpandasaspdfromdatascrollerimportscroll# Call `scroll` with a Pandas DataFrame as the sole argument:my_df=pd.read_csv('<path to your csv>')
scroll(my_df)
# Or pass a path to scroll directlyscroll_parquet('<path to your parquet>')

See the "Keys" section below for navidation. Press 'q' to quit viewing.

Keys

Until configuration options are provided in a later version, the keys are set up to resemble Vim's edit mode.

The following keys are currently supported:

  • Movement

    • h: move to the left
    • j: move down
    • k: move up
    • l: move left
  • Quick Movement

    • Ctrl + F: Page down
    • Ctrl + B: Page up (not working as well for some reason)
  • Highlight mode

    • Press , to highlight the current line for easier horizontal reading.
    • Scrolling up and down will move the highlight bar within the window
    • Press , again to exit highlight mode
  • Goto line

    • Press ;, then type a line number (e.g. :1000) and press Enter
  • Filter columns

    • Press ., then type a comma-separated list of columns (e.g. .name, age, survived) and press Enter
  • SQL querying

    • Press /, then type your query (use 'df' as the table name)
    • e.g. /SELECT AVG(age) AS average_age, sex, survived FROM df GROUP BY sex, survived
    • Then press Enter
    • Note that you can execute new queries against the data frame you just created, or go back
  • Return from query/filter view to entire data frame

    • b
  • Exiting

    • q

Examples

Using iPython is a good way to try out datascroller interactively:

importpandasaspdfromdatascrollerimportscrolltrain=pd.read_csv(
'https://raw.githubusercontent.com/datasets/house-prices-uk/master/data/data.csv')
scroll(train)

Read in the Titanic dataset as a parquet file and view it like any other table:

importpandasaspdfromdatascrollerimportscrolltable=pd.read_parquet("https://raw.githubusercontent.com/baogorek/datascroller/parquet/datascroller/demo_data/titanic.parquet")
scroll(table)

Classes within datascroller

Making datascroller work in arbitrarily sized terminal windows is challenging. The ViewingArea and DFWindow classes help with keeping track of state and separating concepts.

ViewingArea

The ViewingArea class represents the character matrix available to curses. The following example instantiates a ViewingArea object with character paddings of 4 and 2 in the horizonal and vertical orientations, respectively:

from datascroller.scroller import ViewingArea
va = ViewingArea(4, 2)
va.show_curses_representation()

The show_curses_representation() method provides a brief visual display of the character matrix and the bounds of display for the data window.

DFWindow

The DFWindow class is responsible for maintaining a subset of the original data frame, made clear by its flagship method:

def get_dataframe_window(self):
"""DataFrame window of form self.df[r_1:r_2, c_1:c_2]"""
return self.full_df.iloc[self.r_1:self.r_2, self.c_1:self.c_2]

DFWindow must be aware of the viewing area in order to set an appropriate value of self.c_2, and hence DFWindow requires an instance of ViewingArea for initialization.

import pandas as pd
from datascroller.scroller import DFWindow
from datascroller.scroller import ViewingArea
my_df = pd.read_csv(
'https://raw.githubusercontent.com/datasets/house-prices-uk/master/data/data.csv')
va = ViewingArea(4, 2)
df_window = DFWindow(my_df, va)
df_window.find_last_fitting_column()
print(df_window.c_1)
print(df_window.c_2)
df_window.move_right()
print(df_window.c_1)
print(df_window.c_2)
print(df_window.get_dataframe_window())
import curses
stdscr = curses.initscr()
df_window.add_data_to_screen(stdscr)
stdscr.refresh()
curses.endwin()

About

A python package offering data frame scrolling in the terminal

Resources

Stars

38 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - baogorek/datascroller: A python package offering data frame scrolling in the terminal · GitHub
Skip to content

Repository files navigation

datascroller - data scrolling in the terminal!

Welcome to the datascroller project! While IDEs and notebooks are excellent for interactive data exploration, there will always be some of us who prefer to stay in the terminal. For exploring Pandas data frames, that meant painstakingly tedious use of .iloc, until now...

See datascroller in action on YouTube:

datascroller

CircleCI Build Status

baogorek

Installation

via pip

pip install datascroller

Usage

A quick demo

In a command line environment where datascroller is installed, run scroll_demo and refer to the "Keys" Section below. Press "q" to quit.

The file scroller binary –– supports CSVs with any delimiter and parquet files

In a command line environment where datascroller is installed, run scroll <path to your file> and refer to the "Keys" Section for navigation. Press "q" to quit.

Within Python or iPython

Import the scroll function from the datascroller module.

importpandasaspdfromdatascrollerimportscroll# Call `scroll` with a Pandas DataFrame as the sole argument:my_df=pd.read_csv('<path to your csv>')
scroll(my_df)
# Or pass a path to scroll directlyscroll_parquet('<path to your parquet>')

See the "Keys" section below for navidation. Press 'q' to quit viewing.

Keys

Until configuration options are provided in a later version, the keys are set up to resemble Vim's edit mode.

The following keys are currently supported:

  • Movement

    • h: move to the left
    • j: move down
    • k: move up
    • l: move left
  • Quick Movement

    • Ctrl + F: Page down
    • Ctrl + B: Page up (not working as well for some reason)
  • Highlight mode

    • Press , to highlight the current line for easier horizontal reading.
    • Scrolling up and down will move the highlight bar within the window
    • Press , again to exit highlight mode
  • Goto line

    • Press ;, then type a line number (e.g. :1000) and press Enter
  • Filter columns

    • Press ., then type a comma-separated list of columns (e.g. .name, age, survived) and press Enter
  • SQL querying

    • Press /, then type your query (use 'df' as the table name)
    • e.g. /SELECT AVG(age) AS average_age, sex, survived FROM df GROUP BY sex, survived
    • Then press Enter
    • Note that you can execute new queries against the data frame you just created, or go back
  • Return from query/filter view to entire data frame

    • b
  • Exiting

    • q

Examples

Using iPython is a good way to try out datascroller interactively:

importpandasaspdfromdatascrollerimportscrolltrain=pd.read_csv(
'https://raw.githubusercontent.com/datasets/house-prices-uk/master/data/data.csv')
scroll(train)

Read in the Titanic dataset as a parquet file and view it like any other table:

importpandasaspdfromdatascrollerimportscrolltable=pd.read_parquet("https://raw.githubusercontent.com/baogorek/datascroller/parquet/datascroller/demo_data/titanic.parquet")
scroll(table)

Classes within datascroller

Making datascroller work in arbitrarily sized terminal windows is challenging. The ViewingArea and DFWindow classes help with keeping track of state and separating concepts.

ViewingArea

The ViewingArea class represents the character matrix available to curses. The following example instantiates a ViewingArea object with character paddings of 4 and 2 in the horizonal and vertical orientations, respectively:

from datascroller.scroller import ViewingArea
va = ViewingArea(4, 2)
va.show_curses_representation()

The show_curses_representation() method provides a brief visual display of the character matrix and the bounds of display for the data window.

DFWindow

The DFWindow class is responsible for maintaining a subset of the original data frame, made clear by its flagship method:

def get_dataframe_window(self):
"""DataFrame window of form self.df[r_1:r_2, c_1:c_2]"""
return self.full_df.iloc[self.r_1:self.r_2, self.c_1:self.c_2]

DFWindow must be aware of the viewing area in order to set an appropriate value of self.c_2, and hence DFWindow requires an instance of ViewingArea for initialization.

import pandas as pd
from datascroller.scroller import DFWindow
from datascroller.scroller import ViewingArea
my_df = pd.read_csv(
'https://raw.githubusercontent.com/datasets/house-prices-uk/master/data/data.csv')
va = ViewingArea(4, 2)
df_window = DFWindow(my_df, va)
df_window.find_last_fitting_column()
print(df_window.c_1)
print(df_window.c_2)
df_window.move_right()
print(df_window.c_1)
print(df_window.c_2)
print(df_window.get_dataframe_window())
import curses
stdscr = curses.initscr()
df_window.add_data_to_screen(stdscr)
stdscr.refresh()
curses.endwin()

About

A python package offering data frame scrolling in the terminal

Resources

Stars

38 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - baogorek/datascroller: A python package offering data frame scrolling in the terminal · GitHub
Skip to content

Repository files navigation

datascroller - data scrolling in the terminal!

Welcome to the datascroller project! While IDEs and notebooks are excellent for interactive data exploration, there will always be some of us who prefer to stay in the terminal. For exploring Pandas data frames, that meant painstakingly tedious use of .iloc, until now...

See datascroller in action on YouTube:

datascroller

CircleCI Build Status

baogorek

Installation

via pip

pip install datascroller

Usage

A quick demo

In a command line environment where datascroller is installed, run scroll_demo and refer to the "Keys" Section below. Press "q" to quit.

The file scroller binary –– supports CSVs with any delimiter and parquet files

In a command line environment where datascroller is installed, run scroll <path to your file> and refer to the "Keys" Section for navigation. Press "q" to quit.

Within Python or iPython

Import the scroll function from the datascroller module.

importpandasaspdfromdatascrollerimportscroll# Call `scroll` with a Pandas DataFrame as the sole argument:my_df=pd.read_csv('<path to your csv>')
scroll(my_df)
# Or pass a path to scroll directlyscroll_parquet('<path to your parquet>')

See the "Keys" section below for navidation. Press 'q' to quit viewing.

Keys

Until configuration options are provided in a later version, the keys are set up to resemble Vim's edit mode.

The following keys are currently supported:

  • Movement

    • h: move to the left
    • j: move down
    • k: move up
    • l: move left
  • Quick Movement

    • Ctrl + F: Page down
    • Ctrl + B: Page up (not working as well for some reason)
  • Highlight mode

    • Press , to highlight the current line for easier horizontal reading.
    • Scrolling up and down will move the highlight bar within the window
    • Press , again to exit highlight mode
  • Goto line

    • Press ;, then type a line number (e.g. :1000) and press Enter
  • Filter columns

    • Press ., then type a comma-separated list of columns (e.g. .name, age, survived) and press Enter
  • SQL querying

    • Press /, then type your query (use 'df' as the table name)
    • e.g. /SELECT AVG(age) AS average_age, sex, survived FROM df GROUP BY sex, survived
    • Then press Enter
    • Note that you can execute new queries against the data frame you just created, or go back
  • Return from query/filter view to entire data frame

    • b
  • Exiting

    • q

Examples

Using iPython is a good way to try out datascroller interactively:

importpandasaspdfromdatascrollerimportscrolltrain=pd.read_csv(
'https://raw.githubusercontent.com/datasets/house-prices-uk/master/data/data.csv')
scroll(train)

Read in the Titanic dataset as a parquet file and view it like any other table:

importpandasaspdfromdatascrollerimportscrolltable=pd.read_parquet("https://raw.githubusercontent.com/baogorek/datascroller/parquet/datascroller/demo_data/titanic.parquet")
scroll(table)

Classes within datascroller

Making datascroller work in arbitrarily sized terminal windows is challenging. The ViewingArea and DFWindow classes help with keeping track of state and separating concepts.

ViewingArea

The ViewingArea class represents the character matrix available to curses. The following example instantiates a ViewingArea object with character paddings of 4 and 2 in the horizonal and vertical orientations, respectively:

from datascroller.scroller import ViewingArea
va = ViewingArea(4, 2)
va.show_curses_representation()

The show_curses_representation() method provides a brief visual display of the character matrix and the bounds of display for the data window.

DFWindow

The DFWindow class is responsible for maintaining a subset of the original data frame, made clear by its flagship method:

def get_dataframe_window(self):
"""DataFrame window of form self.df[r_1:r_2, c_1:c_2]"""
return self.full_df.iloc[self.r_1:self.r_2, self.c_1:self.c_2]

DFWindow must be aware of the viewing area in order to set an appropriate value of self.c_2, and hence DFWindow requires an instance of ViewingArea for initialization.

import pandas as pd
from datascroller.scroller import DFWindow
from datascroller.scroller import ViewingArea
my_df = pd.read_csv(
'https://raw.githubusercontent.com/datasets/house-prices-uk/master/data/data.csv')
va = ViewingArea(4, 2)
df_window = DFWindow(my_df, va)
df_window.find_last_fitting_column()
print(df_window.c_1)
print(df_window.c_2)
df_window.move_right()
print(df_window.c_1)
print(df_window.c_2)
print(df_window.get_dataframe_window())
import curses
stdscr = curses.initscr()
df_window.add_data_to_screen(stdscr)
stdscr.refresh()
curses.endwin()

About

A python package offering data frame scrolling in the terminal

Resources

Stars

38 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - baogorek/datascroller: A python package offering data frame scrolling in the terminal · GitHub
Skip to content

Repository files navigation

datascroller - data scrolling in the terminal!

Welcome to the datascroller project! While IDEs and notebooks are excellent for interactive data exploration, there will always be some of us who prefer to stay in the terminal. For exploring Pandas data frames, that meant painstakingly tedious use of .iloc, until now...

See datascroller in action on YouTube:

datascroller

CircleCI Build Status

baogorek

Installation

via pip

pip install datascroller

Usage

A quick demo

In a command line environment where datascroller is installed, run scroll_demo and refer to the "Keys" Section below. Press "q" to quit.

The file scroller binary –– supports CSVs with any delimiter and parquet files

In a command line environment where datascroller is installed, run scroll <path to your file> and refer to the "Keys" Section for navigation. Press "q" to quit.

Within Python or iPython

Import the scroll function from the datascroller module.

importpandasaspdfromdatascrollerimportscroll# Call `scroll` with a Pandas DataFrame as the sole argument:my_df=pd.read_csv('<path to your csv>')
scroll(my_df)
# Or pass a path to scroll directlyscroll_parquet('<path to your parquet>')

See the "Keys" section below for navidation. Press 'q' to quit viewing.

Keys

Until configuration options are provided in a later version, the keys are set up to resemble Vim's edit mode.

The following keys are currently supported:

  • Movement

    • h: move to the left
    • j: move down
    • k: move up
    • l: move left
  • Quick Movement

    • Ctrl + F: Page down
    • Ctrl + B: Page up (not working as well for some reason)
  • Highlight mode

    • Press , to highlight the current line for easier horizontal reading.
    • Scrolling up and down will move the highlight bar within the window
    • Press , again to exit highlight mode
  • Goto line

    • Press ;, then type a line number (e.g. :1000) and press Enter
  • Filter columns

    • Press ., then type a comma-separated list of columns (e.g. .name, age, survived) and press Enter
  • SQL querying

    • Press /, then type your query (use 'df' as the table name)
    • e.g. /SELECT AVG(age) AS average_age, sex, survived FROM df GROUP BY sex, survived
    • Then press Enter
    • Note that you can execute new queries against the data frame you just created, or go back
  • Return from query/filter view to entire data frame

    • b
  • Exiting

    • q

Examples

Using iPython is a good way to try out datascroller interactively:

importpandasaspdfromdatascrollerimportscrolltrain=pd.read_csv(
'https://raw.githubusercontent.com/datasets/house-prices-uk/master/data/data.csv')
scroll(train)

Read in the Titanic dataset as a parquet file and view it like any other table:

importpandasaspdfromdatascrollerimportscrolltable=pd.read_parquet("https://raw.githubusercontent.com/baogorek/datascroller/parquet/datascroller/demo_data/titanic.parquet")
scroll(table)

Classes within datascroller

Making datascroller work in arbitrarily sized terminal windows is challenging. The ViewingArea and DFWindow classes help with keeping track of state and separating concepts.

ViewingArea

The ViewingArea class represents the character matrix available to curses. The following example instantiates a ViewingArea object with character paddings of 4 and 2 in the horizonal and vertical orientations, respectively:

from datascroller.scroller import ViewingArea
va = ViewingArea(4, 2)
va.show_curses_representation()

The show_curses_representation() method provides a brief visual display of the character matrix and the bounds of display for the data window.

DFWindow

The DFWindow class is responsible for maintaining a subset of the original data frame, made clear by its flagship method:

def get_dataframe_window(self):
"""DataFrame window of form self.df[r_1:r_2, c_1:c_2]"""
return self.full_df.iloc[self.r_1:self.r_2, self.c_1:self.c_2]

DFWindow must be aware of the viewing area in order to set an appropriate value of self.c_2, and hence DFWindow requires an instance of ViewingArea for initialization.

import pandas as pd
from datascroller.scroller import DFWindow
from datascroller.scroller import ViewingArea
my_df = pd.read_csv(
'https://raw.githubusercontent.com/datasets/house-prices-uk/master/data/data.csv')
va = ViewingArea(4, 2)
df_window = DFWindow(my_df, va)
df_window.find_last_fitting_column()
print(df_window.c_1)
print(df_window.c_2)
df_window.move_right()
print(df_window.c_1)
print(df_window.c_2)
print(df_window.get_dataframe_window())
import curses
stdscr = curses.initscr()
df_window.add_data_to_screen(stdscr)
stdscr.refresh()
curses.endwin()

About

A python package offering data frame scrolling in the terminal

Resources

Stars

38 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - baogorek/datascroller: A python package offering data frame scrolling in the terminal · GitHub
Skip to content

Repository files navigation

datascroller - data scrolling in the terminal!

Welcome to the datascroller project! While IDEs and notebooks are excellent for interactive data exploration, there will always be some of us who prefer to stay in the terminal. For exploring Pandas data frames, that meant painstakingly tedious use of .iloc, until now...

See datascroller in action on YouTube:

datascroller

CircleCI Build Status

baogorek

Installation

via pip

pip install datascroller

Usage

A quick demo

In a command line environment where datascroller is installed, run scroll_demo and refer to the "Keys" Section below. Press "q" to quit.

The file scroller binary –– supports CSVs with any delimiter and parquet files

In a command line environment where datascroller is installed, run scroll <path to your file> and refer to the "Keys" Section for navigation. Press "q" to quit.

Within Python or iPython

Import the scroll function from the datascroller module.

importpandasaspdfromdatascrollerimportscroll# Call `scroll` with a Pandas DataFrame as the sole argument:my_df=pd.read_csv('<path to your csv>')
scroll(my_df)
# Or pass a path to scroll directlyscroll_parquet('<path to your parquet>')

See the "Keys" section below for navidation. Press 'q' to quit viewing.

Keys

Until configuration options are provided in a later version, the keys are set up to resemble Vim's edit mode.

The following keys are currently supported:

  • Movement

    • h: move to the left
    • j: move down
    • k: move up
    • l: move left
  • Quick Movement

    • Ctrl + F: Page down
    • Ctrl + B: Page up (not working as well for some reason)
  • Highlight mode

    • Press , to highlight the current line for easier horizontal reading.
    • Scrolling up and down will move the highlight bar within the window
    • Press , again to exit highlight mode
  • Goto line

    • Press ;, then type a line number (e.g. :1000) and press Enter
  • Filter columns

    • Press ., then type a comma-separated list of columns (e.g. .name, age, survived) and press Enter
  • SQL querying

    • Press /, then type your query (use 'df' as the table name)
    • e.g. /SELECT AVG(age) AS average_age, sex, survived FROM df GROUP BY sex, survived
    • Then press Enter
    • Note that you can execute new queries against the data frame you just created, or go back
  • Return from query/filter view to entire data frame

    • b
  • Exiting

    • q

Examples

Using iPython is a good way to try out datascroller interactively:

importpandasaspdfromdatascrollerimportscrolltrain=pd.read_csv(
'https://raw.githubusercontent.com/datasets/house-prices-uk/master/data/data.csv')
scroll(train)

Read in the Titanic dataset as a parquet file and view it like any other table:

importpandasaspdfromdatascrollerimportscrolltable=pd.read_parquet("https://raw.githubusercontent.com/baogorek/datascroller/parquet/datascroller/demo_data/titanic.parquet")
scroll(table)

Classes within datascroller

Making datascroller work in arbitrarily sized terminal windows is challenging. The ViewingArea and DFWindow classes help with keeping track of state and separating concepts.

ViewingArea

The ViewingArea class represents the character matrix available to curses. The following example instantiates a ViewingArea object with character paddings of 4 and 2 in the horizonal and vertical orientations, respectively:

from datascroller.scroller import ViewingArea
va = ViewingArea(4, 2)
va.show_curses_representation()

The show_curses_representation() method provides a brief visual display of the character matrix and the bounds of display for the data window.

DFWindow

The DFWindow class is responsible for maintaining a subset of the original data frame, made clear by its flagship method:

def get_dataframe_window(self):
"""DataFrame window of form self.df[r_1:r_2, c_1:c_2]"""
return self.full_df.iloc[self.r_1:self.r_2, self.c_1:self.c_2]

DFWindow must be aware of the viewing area in order to set an appropriate value of self.c_2, and hence DFWindow requires an instance of ViewingArea for initialization.

import pandas as pd
from datascroller.scroller import DFWindow
from datascroller.scroller import ViewingArea
my_df = pd.read_csv(
'https://raw.githubusercontent.com/datasets/house-prices-uk/master/data/data.csv')
va = ViewingArea(4, 2)
df_window = DFWindow(my_df, va)
df_window.find_last_fitting_column()
print(df_window.c_1)
print(df_window.c_2)
df_window.move_right()
print(df_window.c_1)
print(df_window.c_2)
print(df_window.get_dataframe_window())
import curses
stdscr = curses.initscr()
df_window.add_data_to_screen(stdscr)
stdscr.refresh()
curses.endwin()

About

A python package offering data frame scrolling in the terminal

Resources

Stars

38 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - baogorek/datascroller: A python package offering data frame scrolling in the terminal · GitHub
Skip to content

Repository files navigation

datascroller - data scrolling in the terminal!

Welcome to the datascroller project! While IDEs and notebooks are excellent for interactive data exploration, there will always be some of us who prefer to stay in the terminal. For exploring Pandas data frames, that meant painstakingly tedious use of .iloc, until now...

See datascroller in action on YouTube:

datascroller

CircleCI Build Status

baogorek

Installation

via pip

pip install datascroller

Usage

A quick demo

In a command line environment where datascroller is installed, run scroll_demo and refer to the "Keys" Section below. Press "q" to quit.

The file scroller binary –– supports CSVs with any delimiter and parquet files

In a command line environment where datascroller is installed, run scroll <path to your file> and refer to the "Keys" Section for navigation. Press "q" to quit.

Within Python or iPython

Import the scroll function from the datascroller module.

importpandasaspdfromdatascrollerimportscroll# Call `scroll` with a Pandas DataFrame as the sole argument:my_df=pd.read_csv('<path to your csv>')
scroll(my_df)
# Or pass a path to scroll directlyscroll_parquet('<path to your parquet>')

See the "Keys" section below for navidation. Press 'q' to quit viewing.

Keys

Until configuration options are provided in a later version, the keys are set up to resemble Vim's edit mode.

The following keys are currently supported:

  • Movement

    • h: move to the left
    • j: move down
    • k: move up
    • l: move left
  • Quick Movement

    • Ctrl + F: Page down
    • Ctrl + B: Page up (not working as well for some reason)
  • Highlight mode

    • Press , to highlight the current line for easier horizontal reading.
    • Scrolling up and down will move the highlight bar within the window
    • Press , again to exit highlight mode
  • Goto line

    • Press ;, then type a line number (e.g. :1000) and press Enter
  • Filter columns

    • Press ., then type a comma-separated list of columns (e.g. .name, age, survived) and press Enter
  • SQL querying

    • Press /, then type your query (use 'df' as the table name)
    • e.g. /SELECT AVG(age) AS average_age, sex, survived FROM df GROUP BY sex, survived
    • Then press Enter
    • Note that you can execute new queries against the data frame you just created, or go back
  • Return from query/filter view to entire data frame

    • b
  • Exiting

    • q

Examples

Using iPython is a good way to try out datascroller interactively:

importpandasaspdfromdatascrollerimportscrolltrain=pd.read_csv(
'https://raw.githubusercontent.com/datasets/house-prices-uk/master/data/data.csv')
scroll(train)

Read in the Titanic dataset as a parquet file and view it like any other table:

importpandasaspdfromdatascrollerimportscrolltable=pd.read_parquet("https://raw.githubusercontent.com/baogorek/datascroller/parquet/datascroller/demo_data/titanic.parquet")
scroll(table)

Classes within datascroller

Making datascroller work in arbitrarily sized terminal windows is challenging. The ViewingArea and DFWindow classes help with keeping track of state and separating concepts.

ViewingArea

The ViewingArea class represents the character matrix available to curses. The following example instantiates a ViewingArea object with character paddings of 4 and 2 in the horizonal and vertical orientations, respectively:

from datascroller.scroller import ViewingArea
va = ViewingArea(4, 2)
va.show_curses_representation()

The show_curses_representation() method provides a brief visual display of the character matrix and the bounds of display for the data window.

DFWindow

The DFWindow class is responsible for maintaining a subset of the original data frame, made clear by its flagship method:

def get_dataframe_window(self):
"""DataFrame window of form self.df[r_1:r_2, c_1:c_2]"""
return self.full_df.iloc[self.r_1:self.r_2, self.c_1:self.c_2]

DFWindow must be aware of the viewing area in order to set an appropriate value of self.c_2, and hence DFWindow requires an instance of ViewingArea for initialization.

import pandas as pd
from datascroller.scroller import DFWindow
from datascroller.scroller import ViewingArea
my_df = pd.read_csv(
'https://raw.githubusercontent.com/datasets/house-prices-uk/master/data/data.csv')
va = ViewingArea(4, 2)
df_window = DFWindow(my_df, va)
df_window.find_last_fitting_column()
print(df_window.c_1)
print(df_window.c_2)
df_window.move_right()
print(df_window.c_1)
print(df_window.c_2)
print(df_window.get_dataframe_window())
import curses
stdscr = curses.initscr()
df_window.add_data_to_screen(stdscr)
stdscr.refresh()
curses.endwin()

About

A python package offering data frame scrolling in the terminal

Resources

Stars

38 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - baogorek/datascroller: A python package offering data frame scrolling in the terminal · GitHub
Skip to content

Repository files navigation

datascroller - data scrolling in the terminal!

Welcome to the datascroller project! While IDEs and notebooks are excellent for interactive data exploration, there will always be some of us who prefer to stay in the terminal. For exploring Pandas data frames, that meant painstakingly tedious use of .iloc, until now...

See datascroller in action on YouTube:

datascroller

CircleCI Build Status

baogorek

Installation

via pip

pip install datascroller

Usage

A quick demo

In a command line environment where datascroller is installed, run scroll_demo and refer to the "Keys" Section below. Press "q" to quit.

The file scroller binary –– supports CSVs with any delimiter and parquet files

In a command line environment where datascroller is installed, run scroll <path to your file> and refer to the "Keys" Section for navigation. Press "q" to quit.

Within Python or iPython

Import the scroll function from the datascroller module.

importpandasaspdfromdatascrollerimportscroll# Call `scroll` with a Pandas DataFrame as the sole argument:my_df=pd.read_csv('<path to your csv>')
scroll(my_df)
# Or pass a path to scroll directlyscroll_parquet('<path to your parquet>')

See the "Keys" section below for navidation. Press 'q' to quit viewing.

Keys

Until configuration options are provided in a later version, the keys are set up to resemble Vim's edit mode.

The following keys are currently supported:

  • Movement

    • h: move to the left
    • j: move down
    • k: move up
    • l: move left
  • Quick Movement

    • Ctrl + F: Page down
    • Ctrl + B: Page up (not working as well for some reason)
  • Highlight mode

    • Press , to highlight the current line for easier horizontal reading.
    • Scrolling up and down will move the highlight bar within the window
    • Press , again to exit highlight mode
  • Goto line

    • Press ;, then type a line number (e.g. :1000) and press Enter
  • Filter columns

    • Press ., then type a comma-separated list of columns (e.g. .name, age, survived) and press Enter
  • SQL querying

    • Press /, then type your query (use 'df' as the table name)
    • e.g. /SELECT AVG(age) AS average_age, sex, survived FROM df GROUP BY sex, survived
    • Then press Enter
    • Note that you can execute new queries against the data frame you just created, or go back
  • Return from query/filter view to entire data frame

    • b
  • Exiting

    • q

Examples

Using iPython is a good way to try out datascroller interactively:

importpandasaspdfromdatascrollerimportscrolltrain=pd.read_csv(
'https://raw.githubusercontent.com/datasets/house-prices-uk/master/data/data.csv')
scroll(train)

Read in the Titanic dataset as a parquet file and view it like any other table:

importpandasaspdfromdatascrollerimportscrolltable=pd.read_parquet("https://raw.githubusercontent.com/baogorek/datascroller/parquet/datascroller/demo_data/titanic.parquet")
scroll(table)

Classes within datascroller

Making datascroller work in arbitrarily sized terminal windows is challenging. The ViewingArea and DFWindow classes help with keeping track of state and separating concepts.

ViewingArea

The ViewingArea class represents the character matrix available to curses. The following example instantiates a ViewingArea object with character paddings of 4 and 2 in the horizonal and vertical orientations, respectively:

from datascroller.scroller import ViewingArea
va = ViewingArea(4, 2)
va.show_curses_representation()

The show_curses_representation() method provides a brief visual display of the character matrix and the bounds of display for the data window.

DFWindow

The DFWindow class is responsible for maintaining a subset of the original data frame, made clear by its flagship method:

def get_dataframe_window(self):
"""DataFrame window of form self.df[r_1:r_2, c_1:c_2]"""
return self.full_df.iloc[self.r_1:self.r_2, self.c_1:self.c_2]

DFWindow must be aware of the viewing area in order to set an appropriate value of self.c_2, and hence DFWindow requires an instance of ViewingArea for initialization.

import pandas as pd
from datascroller.scroller import DFWindow
from datascroller.scroller import ViewingArea
my_df = pd.read_csv(
'https://raw.githubusercontent.com/datasets/house-prices-uk/master/data/data.csv')
va = ViewingArea(4, 2)
df_window = DFWindow(my_df, va)
df_window.find_last_fitting_column()
print(df_window.c_1)
print(df_window.c_2)
df_window.move_right()
print(df_window.c_1)
print(df_window.c_2)
print(df_window.get_dataframe_window())
import curses
stdscr = curses.initscr()
df_window.add_data_to_screen(stdscr)
stdscr.refresh()
curses.endwin()

About

A python package offering data frame scrolling in the terminal

Resources

Stars

38 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - baogorek/datascroller: A python package offering data frame scrolling in the terminal · GitHub
Skip to content

Repository files navigation

datascroller - data scrolling in the terminal!

Welcome to the datascroller project! While IDEs and notebooks are excellent for interactive data exploration, there will always be some of us who prefer to stay in the terminal. For exploring Pandas data frames, that meant painstakingly tedious use of .iloc, until now...

See datascroller in action on YouTube:

datascroller

CircleCI Build Status

baogorek

Installation

via pip

pip install datascroller

Usage

A quick demo

In a command line environment where datascroller is installed, run scroll_demo and refer to the "Keys" Section below. Press "q" to quit.

The file scroller binary –– supports CSVs with any delimiter and parquet files

In a command line environment where datascroller is installed, run scroll <path to your file> and refer to the "Keys" Section for navigation. Press "q" to quit.

Within Python or iPython

Import the scroll function from the datascroller module.

importpandasaspdfromdatascrollerimportscroll# Call `scroll` with a Pandas DataFrame as the sole argument:my_df=pd.read_csv('<path to your csv>')
scroll(my_df)
# Or pass a path to scroll directlyscroll_parquet('<path to your parquet>')

See the "Keys" section below for navidation. Press 'q' to quit viewing.

Keys

Until configuration options are provided in a later version, the keys are set up to resemble Vim's edit mode.

The following keys are currently supported:

  • Movement

    • h: move to the left
    • j: move down
    • k: move up
    • l: move left
  • Quick Movement

    • Ctrl + F: Page down
    • Ctrl + B: Page up (not working as well for some reason)
  • Highlight mode

    • Press , to highlight the current line for easier horizontal reading.
    • Scrolling up and down will move the highlight bar within the window
    • Press , again to exit highlight mode
  • Goto line

    • Press ;, then type a line number (e.g. :1000) and press Enter
  • Filter columns

    • Press ., then type a comma-separated list of columns (e.g. .name, age, survived) and press Enter
  • SQL querying

    • Press /, then type your query (use 'df' as the table name)
    • e.g. /SELECT AVG(age) AS average_age, sex, survived FROM df GROUP BY sex, survived
    • Then press Enter
    • Note that you can execute new queries against the data frame you just created, or go back
  • Return from query/filter view to entire data frame

    • b
  • Exiting

    • q

Examples

Using iPython is a good way to try out datascroller interactively:

importpandasaspdfromdatascrollerimportscrolltrain=pd.read_csv(
'https://raw.githubusercontent.com/datasets/house-prices-uk/master/data/data.csv')
scroll(train)

Read in the Titanic dataset as a parquet file and view it like any other table:

importpandasaspdfromdatascrollerimportscrolltable=pd.read_parquet("https://raw.githubusercontent.com/baogorek/datascroller/parquet/datascroller/demo_data/titanic.parquet")
scroll(table)

Classes within datascroller

Making datascroller work in arbitrarily sized terminal windows is challenging. The ViewingArea and DFWindow classes help with keeping track of state and separating concepts.

ViewingArea

The ViewingArea class represents the character matrix available to curses. The following example instantiates a ViewingArea object with character paddings of 4 and 2 in the horizonal and vertical orientations, respectively:

from datascroller.scroller import ViewingArea
va = ViewingArea(4, 2)
va.show_curses_representation()

The show_curses_representation() method provides a brief visual display of the character matrix and the bounds of display for the data window.

DFWindow

The DFWindow class is responsible for maintaining a subset of the original data frame, made clear by its flagship method:

def get_dataframe_window(self):
"""DataFrame window of form self.df[r_1:r_2, c_1:c_2]"""
return self.full_df.iloc[self.r_1:self.r_2, self.c_1:self.c_2]

DFWindow must be aware of the viewing area in order to set an appropriate value of self.c_2, and hence DFWindow requires an instance of ViewingArea for initialization.

import pandas as pd
from datascroller.scroller import DFWindow
from datascroller.scroller import ViewingArea
my_df = pd.read_csv(
'https://raw.githubusercontent.com/datasets/house-prices-uk/master/data/data.csv')
va = ViewingArea(4, 2)
df_window = DFWindow(my_df, va)
df_window.find_last_fitting_column()
print(df_window.c_1)
print(df_window.c_2)
df_window.move_right()
print(df_window.c_1)
print(df_window.c_2)
print(df_window.get_dataframe_window())
import curses
stdscr = curses.initscr()
df_window.add_data_to_screen(stdscr)
stdscr.refresh()
curses.endwin()

About

A python package offering data frame scrolling in the terminal

Resources

Stars

38 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages