Skip to content

v0.38.2 - DataFrameV2 performance and clarity improvements (2026-03-23)

What Changed?

This release improves the internal quality of the DataFrameV2 (src/v2) module. It includes a bug fix for empty-range handling, a performance improvement in drop, and design notes for future optimization opportunities. No public API changes; fully backward compatible.


What's New

Main Feature: DataFrameV2 internal improvements

What it does: Fixes an ambiguous code path in fromRange when header=false and the input is empty, optimizes column lookup in drop using a Set, and documents intentional design decisions as TODO/inline comments.

How to use it: No changes required. Existing code continues to work as before.


Added

  • Inline TODO comments documenting the column-oriented → row-oriented conversion overhead in filter, withColumn, and groupBy
  • Inline comment in LazyDataFrame._ops explaining the intentional immutability-first design for spread copy

Changed

  • DataFrame.drop: replaced Array.includes (O(n×k)) with Set.has (O(n+k)) for column lookup

Fixed

  • DataFrame.fromRange with header=false: added explicit early return for empty arrays, removing reliance on fromArrays to silently discard an empty generated header list

Is It Safe to Upgrade?

  • Breaking Changes: No
  • Backward Compatible: Yes

All changes are internal. No public API, behavior, or output is affected.


Release Details

  • Date: 2026-03-23
  • Version: v0.38.2
  • gaslamp: clasp version 83
  • pilotlamp: clasp version 40
  • Files Changed: 1 (src/v2/frame.ts)
  • Commits:
  • a8e46a2 docs(v2): add comment explaining intentional spread copy in LazyDataFrame._ops
  • e4e52e3 fix(v2): add early return for empty arrays in DataFrame.fromRange with header=false
  • 387e529 perf(v2): use Set for O(1) lookup in DataFrame.drop
  • 2a76967 perf(v2): add TODO notes for mapToRows conversion overhead in filter/withColumn/groupBy

Known Issues

  • filter / withColumn / groupBy perform column-oriented → row-oriented conversion on every call (see TODO comments). Use LazyDataFrame.collect() to batch operations and reduce overhead.

Next Steps

  • Continue DataFrameV2 review: remaining items from the 2026-03-22 stability review