All nodes/Data/DataFrame Ops

DF Concat

SQL UNION ALL / column-stack: concatenates two DataFrames by rows or by columns.

DF Concat
LeftSuccess
RightError

Type in the graph: df_concat

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 Concat
Exit
  • Execute + Data
Press “Copy nodes”, open the editor and hit Ctrl+V on the canvas.

Runs as pasted

When to use it

Puts two tables together: either one below the other (SQL UNION ALL) or side by side. Reach for it when the tables mean the same thing — exports for two months, answers from two sources. Joining on a shared key is df_merge.

The inputs mirror the join node: “Left” starts the node and brings a value, “Right” brings a value only. The branch that prepares the right-hand table has to finish earlier along the execution path, otherwise the node fails, reporting that its input is not a table.

How it works

“Axis” = rows appends the right table’s rows after the left table’s. Columns are matched by name, not by position; a column missing from one side is filled with blanks for its rows. Unlike SQL UNION, the column sets do not have to match.

“Axis” = columns places the tables next to each other and lines them up by row number, not by value.

“Ignore source index” renumbers the result from zero. On the columns axis the toggle is hidden: there the row numbering is exactly what the tables are aligned by, so it must stay.

Common mistakes

  • Stacking by columns after a filter. df_query preserves the original row numbering, while df_sort and df_drop_duplicates rewrite it. Line up two tables with different numbering and the rows drift apart, leaving blanks. Matching by value is what df_merge is for.
  • Expecting the stack to remove repeats. This is UNION ALL: identical rows both survive. Put df_drop_duplicates after it.
  • The same field named differently. email and Email on the rows axis produce two half-empty columns. Normalise the names with df_select first.

Inputs

PortWirePayloadNotes
LeftleftExecute + Dataexecute_datadataframe
RightrightDatadatadataframe

Outputs

PortWirePayloadNotes
SuccessoutputExecute + Dataexecute_datadataframe
Erroron_errorExecute + Dataexecute_data

shown when expose_error_output = true

Configuration

FieldTypeDefaultDescription
Axisaxisstringrows

``rows`` = append A then B (UNION ALL); ``columns`` = side-by-side join by index.

Options: rows, columns

Ignore source indexignore_indexbooleantrue

Renumber the rows 0..n-1 instead of keeping each source's index.

shown when axis = rows

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.