Comparison with Other DataFrame Libraries¶
gaslamp is not the only DataFrame library — but it is the only one designed to run inside Google Apps Script.
This page compares gaslamp with other popular options to help you understand where it fits.
Quick Comparison¶
| gaslamp | GAS raw API | danfo.js | arquero | |
|---|---|---|---|---|
| Runs in GAS | ✅ | ✅ | ❌ | ❌ |
| No installation | ✅ | ✅ | ❌ | ❌ |
| Sheets integration | ✅ direct | ✅ native | ❌ | ❌ |
| DataFrame API | ✅ full | ❌ manual | ✅ full | ✅ full |
| Runtime type safety | ✅ | ❌ | ❌ | ❌ |
Environment Compatibility¶
| Environment | gaslamp | GAS raw API | danfo.js | arquero |
|---|---|---|---|---|
| GAS | ✅ | ✅ | ❌ | ❌ |
| Node.js | ✅ (dev/test) | ❌ | ✅ | ✅ |
| Browser | ❌ | ❌ | ✅ | ✅ |
danfo.js and arquero are JavaScript DataFrames but depend on Node.js APIs unavailable in GAS.
gaslamp is the only DataFrame library that runs in the GAS runtime.
Installation and Dependencies¶
| Feature | gaslamp | GAS raw API | danfo.js | arquero |
|---|---|---|---|---|
| Installation in GAS | ✅ Script ID (library) | ✅ Built-in | ❌ Not applicable | ❌ Not applicable |
| External dependencies | None | None | Node.js / npm | Node.js / npm |
gaslamp is added to a GAS project as a library via a Script ID — no package manager or build step required on the GAS side.
Google Sheets Integration¶
| Feature | gaslamp | GAS raw API | danfo.js | arquero |
|---|---|---|---|---|
| Read from Sheet | ✅ fromSheet / fromRange |
✅ getValues() |
❌ | ❌ |
| Write to Sheet | ✅ toSheet |
✅ setValues() |
❌ | ❌ |
| No extra setup | ✅ | ✅ | — | — |
With the GAS raw API, reading a sheet gives you any[][] — a plain 2D array with no structure.
gaslamp wraps that call in fromSheet() and gives you a full DataFrame immediately.
DataFrame API¶
| Feature | gaslamp | GAS raw API | danfo.js | arquero |
|---|---|---|---|---|
| Filtering | ✅ filter() |
❌ manual | ✅ query() / loc |
✅ filter() |
| Selection | ✅ select() |
❌ manual | ✅ loc / iloc |
✅ select() |
| Renaming | ✅ rename() |
❌ manual | ✅ rename() |
✅ rename() |
| Grouping | ✅ groupBy() |
❌ manual | ✅ groupby() |
✅ groupby() + rollup() |
| Sorting | ✅ sortBy() |
❌ manual | ✅ sort_values() |
✅ orderby() |
| Joining | ✅ join() |
❌ manual | ✅ join() |
✅ join() |
| Reshaping | ✅ pivot() / melt() |
❌ manual | ⚠️ not implemented | ✅ pivot() / fold() |
| Lazy evaluation | ✅ LazyFrame |
❌ | ❌ | ❌ |
| Expression builder | ✅ Expression |
❌ | ❌ | ✅ derive() + op |
Since the author is a Python user, the API design is heavily inspired by pandas and polars.
Method names like filter, groupBy, select, melt, and pivot should feel familiar to Python DataFrame users.
Runtime Type Safety¶
GAS executes JavaScript — TypeScript types are erased at runtime.
Data from getValues() arrives as any[][] with no type information.
| Feature | gaslamp | GAS raw API | danfo.js | arquero |
|---|---|---|---|---|
| Runtime type validation | ✅ FlameWright / FlameFrame |
❌ | ⚠️ dtype inference | ❌ |
| Schema definition | ✅ composable guards | ❌ | ❌ | ❌ |
| Error reporting | ✅ per-row errors | ❌ | ❌ | ❌ |
Summary¶
Use gaslamp when:
- Your data lives in Google Sheets and you want a DataFrame API without leaving GAS
- You want to validate spreadsheet data types at runtime
Use danfo.js when:
- You are building a Node.js or browser-based application
- You want a pandas-like API in JavaScript
- You are working with TensorFlow.js and need tensor conversion
Use arquero when:
- You are building data visualizations with Observable or Vega/Vega-Lite
- You need a dplyr-inspired relational query API
- You are working with Apache Arrow data