Modifying DataFrame Structure

Loading concept...

🏗️ Reshaping Your Data Table: A Builder’s Guide

Imagine your DataFrame is a LEGO table. You can add new columns of blocks, remove pieces you don’t need, and rearrange everything exactly how you want. Let’s become master builders!


🧱 The Big Picture

Think of a DataFrame like a spreadsheet or a toy organizer with slots. Sometimes you need to:

  • Add a new slot (column) for a new type of toy
  • Remove a slot you don’t use anymore
  • Rearrange where things go
  • Make a copy so you can experiment without breaking the original

Let’s learn each skill, one by one!


➕ Adding a New Column

The Story: Your toy box has columns for “Toy Name” and “Color”. But now you want to track “Price” too!

It’s Super Easy:

# Your toy box
df = pd.DataFrame({
    'Toy': ['Car', 'Ball', 'Doll'],
    'Color': ['Red', 'Blue', 'Pink']
})

# Add a new column - just like this!
df['Price'] = [10, 5, 15]

What Happened?

Toy Color Price
Car Red 10
Ball Blue 5
Doll Pink 15

Magic Trick: You can also add a column where every row has the same value:

df['InStock'] = True  # All toys are in stock!

🗑️ Deleting Columns with drop()

The Story: You decided you don’t want to track “Color” anymore. Time to remove that column!

# Remove ONE column
df = df.drop('Color', axis=1)

# Remove MULTIPLE columns at once
df = df.drop(['Color', 'Price'], axis=1)

The Secret Code: axis=1 means “columns” (think: columns go sideways, like the number 1 lying down)

graph TD A[Original Table] --> B{drop with axis=1} B --> C[Column Removed!] style C fill:#90EE90

⚠️ Important: By default, drop() gives you a NEW table. The original stays the same. Want to change the original? Add inplace=True:

df.drop('Color', axis=1, inplace=True)

🚮 Deleting Rows with drop()

The Story: That broken toy in row 1? Let’s remove it!

# Remove row at index 1
df = df.drop(1, axis=0)

# Remove multiple rows
df = df.drop([0, 2], axis=0)

The Secret Code: axis=0 means “rows” (think: rows go up-down, like you standing up = 0)

Before After dropping row 1
Row 0: Car Row 0: Car
Row 1: Ball Row 2: Doll
Row 2: Doll

🎪 The pop() Method - Remove AND Keep

The Story: What if you want to remove a column BUT also save it somewhere else? Like taking a toy out of the box to give to a friend!

# Pop removes the column AND returns it
saved_prices = df.pop('Price')

print(saved_prices)
# Output: [10, 5, 15]

Pop vs Drop:

Method What it does
drop() Removes and throws away
pop() Removes and GIVES it to you

⚠️ Note: pop() only works for columns, not rows!


📍 Inserting Columns at a Specific Spot

The Story: You want to add “Weight” as the SECOND column, not at the end!

# insert(position, name, values)
df.insert(1, 'Weight', [2, 1, 3])

Before: | Toy | Color | Price |

After inserting at position 1: | Toy | Weight | Color | Price |

✨ Position 0 = first column, Position 1 = second column, and so on!


🎁 The assign() Method - Add Without Changing

The Story: Imagine you want to TRY adding a column, but you don’t want to mess up your original table. Like trying on clothes without buying them!

# Creates a NEW table with the extra column
new_df = df.assign(Discount=0.10)

# Original df is UNCHANGED!
# new_df has the 'Discount' column

Super Power: Add multiple columns at once!

new_df = df.assign(
    Discount=0.10,
    FinalPrice=df['Price'] * 0.90
)
graph TD A[Original DataFrame] --> B[assign method] B --> C[NEW DataFrame with extra columns] A --> D[Original stays SAFE] style C fill:#87CEEB style D fill:#90EE90

💥 The explode() Method - Unpacking Lists

The Story: What if one cell has MULTIPLE values inside it? Like a toy box that contains a bag with 3 marbles?

df = pd.DataFrame({
    'Kid': ['Alice', 'Bob'],
    'Toys': [['Car', 'Ball'], ['Doll']]
})
Kid Toys
Alice [Car, Ball]
Bob [Doll]

Use explode() to unpack:

df = df.explode('Toys')
Kid Toys
Alice Car
Alice Ball
Bob Doll

🎆 Each item in the list gets its own row!


📋 Copying DataFrames - The Safe Way

The Story: You want to experiment with your table, but you’re scared of breaking it. Make a copy first!

⚠️ The WRONG Way (Shallow Copy)

copy_df = df  # This is NOT a real copy!

If you change copy_df, you change df too! They’re the same table with two names.

✅ The RIGHT Way (Deep Copy)

copy_df = df.copy()  # This IS a real copy!

Now copy_df is completely separate. Change it all you want!

graph TD A[Original df] --> B{How to copy?} B -->|df2 = df| C[SAME table, 2 names] B -->|df2 = df.copy| D[TWO separate tables] style C fill:#FFB6C1 style D fill:#90EE90

🎯 Quick Reference Card

Want to… Use this…
Add column at end df['new'] = values
Add column at specific spot df.insert(pos, name, values)
Add column safely (new table) df.assign(new=values)
Remove column(s) df.drop(name, axis=1)
Remove row(s) df.drop(index, axis=0)
Remove & save column df.pop('column')
Unpack list column df.explode('column')
Make a real copy df.copy()

🌟 You Did It!

You now know how to:

  • ➕ Add new columns anywhere you want
  • 🗑️ Remove columns or rows you don’t need
  • 🎪 Pop columns to use elsewhere
  • 📍 Insert columns at exact positions
  • 🎁 Safely add columns without changing the original
  • 💥 Explode lists into separate rows
  • 📋 Make safe copies of your data

You’re a DataFrame architect now! 🏆

Loading story...

No Story Available

This concept doesn't have a story yet.

Story Preview

Story - Premium Content

Please sign in to view this concept and start learning.

Upgrade to Premium to unlock full access to all content.

Interactive Preview

Interactive - Premium Content

Please sign in to view this concept and start learning.

Upgrade to Premium to unlock full access to all content.

No Interactive Content

This concept doesn't have interactive content yet.

Cheatsheet Preview

Cheatsheet - Premium Content

Please sign in to view this concept and start learning.

Upgrade to Premium to unlock full access to all content.

No Cheatsheet Available

This concept doesn't have a cheatsheet yet.

Quiz Preview

Quiz - Premium Content

Please sign in to view this concept and start learning.

Upgrade to Premium to unlock full access to all content.

No Quiz Available

This concept doesn't have a quiz yet.