Acquire / memory · All operations

Paste in a table

Take a table from memory or the clipboard.

Status

In arcform

Not built yet

arcform does not do this yet; it would live in Brightfield's view. Its place on the roadmap

Shape of the result
a new table, from no input table
Level
not a step

Variants

Paste from the clipboard

Parse the system clipboard's contents as a table.

Read a table from in-memory objects

Take a table from data a program already holds, such as an Arrow table, a data frame or a dictionary of arrays.

What other tools call it

Meridian's classification; an independent blind rating agreed on 86.2% of 312 rows (exact class, version 2).

Ibis (1)
  • InMemoryTableread 2026-09-27

    A table whose rows come from in-memory data such as a pandas or Arrow object

Polars (2)
VisiData (1)
  • open-syspasteread 2026-09-23

    Open system clipboard contents as a sheet, parsed as a given filetype

Yggdrasil Decision Forests (7)
  • Dict of numpy arrayread 2026-09-27

    Train or predict from an in-memory dictionary of column name to NumPy array or list

  • Pandas dataframeread 2026-09-27

    Train or predict from an in-memory Pandas DataFrame; no multi-dimensional columns

  • Polars DataFrameread 2026-09-27

    Train or predict from an in-memory Polars DataFrame

  • Train or predict from a PyGrain loader; experimental, Linux only

  • TensorFlow Datasetread 2026-09-27

    Train or predict from a batched TensorFlow Dataset; documented as inefficient

  • Xarrayread 2026-09-27

    Train or predict from an in-memory Xarray Dataset

  • Load any supported data source into YDF's in-memory columnar dataset for reuse

Background

In DuckDB's Python client, a pandas DataFrame stored in a local variable can be queried as if it were a regular table.[1] In OpenRefine, data can be copied and pasted in from anywhere, and each new line of pasted text is read as a row.[2] The clipboard is a buffer that some operating systems provide for short-term storage and transfer across applications.[3]

When to use it

In OpenRefine, pasting is useful for pre-selecting a specific number of rows, or for pasting together rows from different places, rather than deleting unwanted rows later.[2] In the Polars library, read_clipboard is useful for reading data copied from Excel or other similar spreadsheet software.[4] In Polars, read_clipboard splits columns on a tab by default, while pandas.read_clipboard splits on one or more whitespace characters by default.[4][5] When the copied cells hold values with spaces in them, name a tab separator rather than relying on a whitespace default. (Meridian's view) A pasted table has no address to read again, so save it to a file before building anything that will be rerun on it. (Meridian's view)

In DuckDB's Python client, only variables visible to Python code where sql() or execute() is called can be queried by name; setting python_scan_all_frames to true also looks in the functions that called it.[6] In DuckDB's Python client, an object given a SQL name with register() takes precedence over a native DuckDB table or view of the same name, and both over a Python variable found by name.[6] In DuckDB's Python client, an Apache Arrow RecordBatchReader can be read only once, so its data must be read into a table, for example with read_all(), to be scanned again.[6] DuckDB scans Apache Arrow tables and Polars DataFrames on all threads, so a query that depends on row order without an ORDER BY, such as one using first(), can return different rows between runs.[6] For a pandas DataFrame column of the object dtype, DuckDB picks the target type from a sample of rows, 1000 by default, set by the pandas_analyze_sample option.[6] In DuckDB, an object column whose type is picked wrongly from its sample fails with Invalid Input Error: Failed to cast value, and the fix is a larger sample.[6] Name the ordering whenever a result from a table held in memory depends on which row comes first. (Meridian's view)

The method

Applications communicate through the clipboard by providing either serialised representations of an object or a promise, and the sending and receiving applications negotiate the formats that can be transferred.[3] The operating system and graphical user interface toolkit may convert between clipboard formats, for example from rich text to plain text and back.[3] In pandas, read_clipboard reads text from the clipboard and passes it to read_csv, parsing it much as a comma-separated values (CSV) file is parsed.[5] In Polars, read_clipboard likewise reads text from the clipboard and passes it to read_csv.[4] In OpenRefine, pasted text is assumed to be tab-separated or comma-separated, and if a tab character is found the data is taken as tab-separated.[2] In VisiData, the open-syspaste command, bound to gShift+P, loads a new table from the system clipboard, parsed as a filetype the user names, tab-separated values (tsv) by default.[7]

DuckDB's replacement scan API registers a callback that is called when a query reads a table that does not exist in the catalogue, and the callback can put a table function in its place.[8] DuckDB's Python client uses replacement scans to replace a query's read of a DataFrame's variable name with a table function that reads the DataFrame.[1][6] Apache Arrow is designed to be a universal in-memory format for tabular, columnar data.[9] The Arrow C data interface is a small, stable set of C definitions meant to allow zero-copy sharing of Arrow data between independent runtimes and components running in the same process.[9] The Arrow PyCapsule interface defines standard methods, such as __arrow_c_stream__, so a Python library accepting Arrow data can call them instead of hardcoding support for specific Arrow producers.[10] DuckDB can consume any object that implements the Arrow PyCapsule interface through an __arrow_c_stream__ method.[6] In Polars, from_arrow builds a DataFrame from Arrow data with zero copy for the most part, and types Polars does not support may be cast to the closest supported type.[11]

Compared with the alternatives

The Arrow C data interface is zero-copy by design, while the Arrow inter-process communication (IPC) format works across processes and machines.[9] Sharing data between distinct processes, and persisting it to storage, are among the Arrow C data interface's stated non-goals.[9] Reading a table a program already holds suits work inside one process; once the table must outlive the process or cross to another, write it to a file. (Meridian's view) In DuckDB's Python client, register() gives a DataFrame or Arrow object a SQL name, while CREATE TABLE AS SELECT makes a DuckDB table from the DataFrame's contents.[6] DuckDB's VALUES clause specifies a fixed number of rows, and can stand alone, sit in a FROM clause or feed an INSERT INTO statement.[12] For a handful of rows that belong with the query itself, a VALUES clause keeps the table in the SQL text, where pasting would leave no record of it. (Meridian's view)