Bird
Raised Fist0
Data Analysis Pythondata~5 mins

concat() for stacking DataFrames in Data Analysis Python

Choose your learning style10 modes available
Introduction

We use concat() to join two or more tables (DataFrames) together. It helps us combine data from different sources into one big table.

You have sales data from January and February in separate tables and want to see all months together.
You collected survey results from different cities and want to analyze them as one dataset.
You want to add new rows of data to an existing table without changing the columns.
You want to stack data vertically or horizontally to prepare for analysis.
Syntax
Data Analysis Python
import pandas as pd

# Create DataFrames
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)

# Concatenate DataFrames vertically (stack rows)
result = pd.concat([df1, df2], axis=0, ignore_index=True)

# Concatenate DataFrames horizontally (stack columns)
result = pd.concat([df1, df2], axis=1)

axis=0 stacks rows (one below the other).

axis=1 stacks columns (side by side).

Examples
Shows what happens when one DataFrame is empty and when columns differ.
Data Analysis Python
import pandas as pd

df_empty = pd.DataFrame()
df_one = pd.DataFrame({'A': [1]})
df_two = pd.DataFrame({'A': [2], 'B': [3]})

# Concatenate empty and one-row DataFrame
result1 = pd.concat([df_empty, df_one], ignore_index=True)

# Concatenate one-row and two-column DataFrame
result2 = pd.concat([df_one, df_two], ignore_index=True)

print(result1)
print(result2)
Stacks two DataFrames vertically, showing how rows from the second come after the first.
Data Analysis Python
import pandas as pd

df_start = pd.DataFrame({'A': [10, 20]})
df_end = pd.DataFrame({'A': [30, 40]})

# Stack df_end below df_start
result = pd.concat([df_start, df_end], ignore_index=True)

print(result)
Stacks two DataFrames horizontally, adding columns side by side.
Data Analysis Python
import pandas as pd

df_left = pd.DataFrame({'A': [1, 2]})
df_right = pd.DataFrame({'B': [3, 4]})

# Stack columns side by side
result = pd.concat([df_left, df_right], axis=1)

print(result)
Sample Program

This program creates two small tables for January and February sales. Then it stacks them vertically to see all sales together.

Data Analysis Python
import pandas as pd

# Create two DataFrames with sales data
sales_jan = pd.DataFrame({
    'Product': ['Apple', 'Banana'],
    'Sales': [100, 150]
})

sales_feb = pd.DataFrame({
    'Product': ['Apple', 'Banana'],
    'Sales': [120, 130]
})

print('Sales January:')
print(sales_jan)
print('\nSales February:')
print(sales_feb)

# Stack the two DataFrames vertically to combine months
all_sales = pd.concat([sales_jan, sales_feb], axis=0, ignore_index=True)

print('\nCombined Sales:')
print(all_sales)
OutputSuccess
Important Notes

Time complexity: Concatenation runs in O(n) where n is total rows or columns combined.

Space complexity: Requires extra space to hold the combined DataFrame.

Common mistake: Forgetting ignore_index=True can keep old row numbers, causing confusion.

Use concat() when you want to stack DataFrames. Use merge() or join() when you want to combine based on matching columns.

Summary

concat() stacks DataFrames vertically or horizontally.

Use axis=0 to add rows, axis=1 to add columns.

Remember to use ignore_index=True to reset row numbers after stacking rows.

Practice

(1/5)
1. What does the concat() function do when stacking DataFrames with axis=0?
easy
A. It sorts the DataFrames before stacking.
B. It stacks DataFrames horizontally by adding columns.
C. It stacks DataFrames vertically by adding rows.
D. It merges DataFrames based on matching column values.

Solution

  1. Step 1: Understand axis parameter in concat()

    The axis=0 means stacking along rows, so new rows are added below existing ones.
  2. Step 2: Differentiate vertical vs horizontal stacking

    Vertical stacking adds rows; horizontal stacking (axis=1) adds columns side by side.
  3. Final Answer:

    It stacks DataFrames vertically by adding rows. -> Option C
  4. Quick Check:

    axis=0 means vertical stacking [OK]
Hint: axis=0 adds rows, axis=1 adds columns [OK]
Common Mistakes:
  • Confusing axis=0 with horizontal stacking
  • Thinking concat merges like join
  • Assuming concat sorts data automatically
2. Which of the following is the correct syntax to stack two DataFrames df1 and df2 vertically and reset the index?
easy
A. pd.concat([df1, df2], axis=1, ignore_index=True)
B. pd.concat([df1, df2], axis=0, ignore_index=True)
C. pd.concat(df1, df2, axis=0, ignore_index=True)
D. pd.concat([df1, df2], axis=0)

Solution

  1. Step 1: Check the concat() function syntax

    Correct syntax requires a list of DataFrames as first argument, e.g., [df1, df2].
  2. Step 2: Confirm axis and ignore_index usage

    To stack vertically and reset index, use axis=0 and ignore_index=True.
  3. Final Answer:

    pd.concat([df1, df2], axis=0, ignore_index=True) -> Option B
  4. Quick Check:

    List + axis=0 + ignore_index=True = correct syntax [OK]
Hint: Use list of DataFrames and axis=0 for vertical concat [OK]
Common Mistakes:
  • Passing DataFrames without list brackets
  • Using axis=1 for vertical stacking
  • Forgetting ignore_index to reset row numbers
3. Given these DataFrames:
import pandas as pd
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'A': [5], 'B': [6]})
result = pd.concat([df1, df2], axis=0, ignore_index=True)
print(result)

What is the output?
medium
A. A B 0 1 3 1 2 4 2 5 6
B. A B 0 1 3 1 2 4 0 5 6
C. A B 0 1 3 1 2 4
D. Error due to missing axis parameter

Solution

  1. Step 1: Understand concat with axis=0 and ignore_index=True

    Rows from df2 are added below df1, and index resets from 0 to 2.
  2. Step 2: Combine rows and reset index

    Result has 3 rows with index 0,1,2 and columns A and B filled accordingly.
  3. Final Answer:

    A B 0 1 3 1 2 4 2 5 6 -> Option A
  4. Quick Check:

    concat vertical + ignore_index resets index [OK]
Hint: ignore_index=True resets row numbers after concat [OK]
Common Mistakes:
  • Expecting original index to remain
  • Confusing axis=0 with axis=1 output
  • Forgetting to pass DataFrames as list
4. What is wrong with this code snippet?
import pandas as pd
df1 = pd.DataFrame({'X': [1, 2]})
df2 = pd.DataFrame({'Y': [3, 4]})
result = pd.concat(df1, df2, axis=0)
print(result)
medium
A. Missing list brackets around DataFrames in concat.
B. axis=0 is invalid for concat.
C. DataFrames must have same columns to concat.
D. ignore_index=True is required.

Solution

  1. Step 1: Check concat() argument format

    concat() expects a list of DataFrames as first argument, but here two DataFrames are passed separately.
  2. Step 2: Identify correct usage

    Correct call is pd.concat([df1, df2], axis=0) with brackets around DataFrames.
  3. Final Answer:

    Missing list brackets around DataFrames in concat. -> Option A
  4. Quick Check:

    concat needs list of DataFrames [OK]
Hint: Always pass DataFrames as a list to concat() [OK]
Common Mistakes:
  • Passing DataFrames as separate arguments
  • Assuming axis=0 is invalid
  • Thinking ignore_index is mandatory
5. You have two DataFrames:
df1 = pd.DataFrame({'Name': ['Alice', 'Bob'], 'Score': [85, 90]})
df2 = pd.DataFrame({'Name': ['Charlie'], 'Score': [88]})

You want to stack them vertically but keep the original index from both DataFrames. Which code will do this correctly?
hard
A. pd.concat([df1, df2], axis=0, ignore_index=True)
B. pd.concat(df1, df2, axis=0)
C. pd.concat([df1, df2], axis=1)
D. pd.concat([df1, df2], axis=0)

Solution

  1. Step 1: Understand index behavior in concat()

    By default, concat keeps original indexes unless ignore_index=True is set.
  2. Step 2: Choose correct parameters

    To stack vertically and keep indexes, use axis=0 without ignore_index.
  3. Final Answer:

    pd.concat([df1, df2], axis=0) -> Option D
  4. Quick Check:

    Default concat keeps original index [OK]
Hint: Omit ignore_index to keep original indexes [OK]
Common Mistakes:
  • Using ignore_index=True when original index is needed
  • Using axis=1 for vertical stacking
  • Passing DataFrames without list brackets
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard