All nodes/Data/DataFrame Ops
DF Query
SQL WHERE: filters DataFrame rows by an expression (``DataFrame.query`` syntax). Example: ``revenue > 1000 and country == 'DE'``.
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
- Execute + Data
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 asDataFrameEnvelope(rows=42, cols=5), not the data. To get JSON or CSV text, put convert after this node.
Inputs
| Port | Wire | Payload | Notes |
|---|---|---|---|
DataFramedf | Execute + Dataexecute_data | dataframe |
Outputs
| Port | Wire | Payload | Notes |
|---|---|---|---|
Successoutput | Execute + Dataexecute_data | dataframe | |
Erroron_error | Execute + Dataexecute_data | — | shown when expose_error_output = true |
Configuration
| Field | Type | Default | Description |
|---|---|---|---|
Expressionexpression | string | "" | 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.