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
DataFrameSuccess
Error

Type in the graph: df_query

Exec

An error branch can be enabled (expose_error_output) to handle failures on their own path.

Ports can be split into separate execution and data handles.

Try it

Minimal working workflow

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
DataFramedfExecute + Dataexecute_datadataframe

Outputs

PortWirePayloadNotes
SuccessoutputExecute + 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.