All nodes/Data/DataFrame Ops

DF Query

SQL WHERE: filters DataFrame rows by an expression (``DataFrame.query`` syntax). Example: ``revenue > 1000 and country == 'DE'``.

DF Query▶
TableTable
Error

Type in the graph: df_query

Exec

An error output can be enabled to handle failures on their own path.

Ports can be split into separate execution and data handles.

Try it

Minimal working scenario

Entry
DF Query▶
Exit▶
  • Execute + Data
Press “Copy nodes”, open the editor and hit Ctrl+V on the canvas.

Runs as pasted

When to use it

Keeps only the rows that match a condition — the SQL WHERE of the family. Picking columns is df_select, collapsing repeats is df_drop_duplicates. If the condition should send the whole run down another branch instead of filtering a table, that is if.

How it works

The expression goes to pandas as written. Column names are bare identifiers, text values are quoted, conditions are joined with and, or, not: revenue > 1000 and country == 'DE'.

An empty result is not an error. The node returns a table of zero rows, the run continues, and the next step sees an empty selection rather than a failure. The original row numbering is preserved — which matters if you later stack tables side by side with df_concat.

The “Expression” field is not a template: {{ variables.x }} is not expanded and reaches pandas verbatim. Conditions are written in terms of columns and literals, not values from the run context.

The characters @ and __ are rejected with an error — they are how pandas reaches outside the table, and a working filter never needs them.

Common mistakes

  • An empty expression. The graph fails validation: the node has no “pass everything” mode.
  • = instead of ==. Comparison in pandas is doubled; a single = is a syntax error.
  • A mistyped column name fails the node. Check names against the previous step’s preview: the run log shows every df node’s schema and its first rows (up to 50).
  • Expecting a table in a template. {{ nodes.<id>.output }} renders an internal marker such as DataFrameEnvelope(rows=42, cols=5), not the data. To get JSON or CSV text, put convert after this node.

Inputs

PortWirePayloadNotes
TabledfExecute + Dataexecute_datadataframe

Outputs

PortWirePayloadNotes
TableoutputExecute + Dataexecute_datadataframe
Erroron_errorExecute + Dataexecute_data—

shown when expose_error_output = true

Configuration

FieldTypeDefaultDescription
Expressionexpressionstring""

pandas query expression, e.g. ``col_a > 1 and col_b == 'x'``.

Shared fields

Every node has these three — the platform adds them, not the node author.

  • expose_error_output — When enabled, show an execution output to connect nodes that run if this step fails.
  • split_ports_in — Show separate execution and data input handles instead of one combined port.
  • split_ports_out — Show separate execution and data output handles instead of one combined port.