Specifying Column Names and Index in pandas DataFrame
📖 Scenario: You work in a small bookstore. You have sales data but it comes without column names and index labels. You want to organize it properly so you can analyze it easily.
🎯 Goal: Create a pandas DataFrame from raw sales data by specifying the column names and setting a custom index for the rows.
📋 What You'll Learn
Create a pandas DataFrame from a list of lists with raw sales data.
Specify the column names as 'Book', 'Author', and 'Copies Sold'.
Set the index of the DataFrame to be the book titles.
💡 Why This Matters
🌍 Real World
Organizing raw data with proper column names and indexes is essential for clear data analysis and reporting in any business.
💼 Career
Data analysts and scientists often receive data without headers or indexes and must clean and structure it before analysis.
Progress0 / 4 steps
1
Create raw sales data list
Create a variable called raw_data that holds this list of lists exactly: [["The Alchemist", "Paulo Coelho", 120], ["1984", "George Orwell", 85], ["To Kill a Mockingbird", "Harper Lee", 95]]
Pandas
Hint
Use a variable named raw_data and assign the list of lists exactly as shown.
2
Import pandas and define column names
Import pandas as pd. Create a list called columns with these exact strings: 'Book', 'Author', and 'Copies Sold'.
Pandas
Hint
Use import pandas as pd and create a list named columns with the exact column names.
3
Create DataFrame with specified columns
Create a pandas DataFrame called df from raw_data using the columns list to specify the column names.
Pandas
Hint
Use pd.DataFrame() with raw_data and columns=columns.
4
Set the DataFrame index to the book titles
Set the index of the DataFrame df to the 'Book' column using df.set_index('Book', inplace=True).
Pandas
Hint
Use df.set_index('Book', inplace=True) to set the index to the book titles.
Practice
(1/5)
1. What is the purpose of specifying column names when creating a pandas DataFrame?
easy
A. To change the data type of columns automatically
B. To delete unwanted rows from the DataFrame
C. To sort the rows in ascending order
D. To label each data column clearly for easier understanding
Solution
Step 1: Understand column names role
Column names act like labels on folders, helping identify what data each column holds.
Step 2: Recognize their benefit
Clear labels make it easier to read and work with data without confusion.
Final Answer:
To label each data column clearly for easier understanding -> Option D
Quick Check:
Column names label data columns [OK]
Hint: Column names are like labels on folders for clarity [OK]
Common Mistakes:
Thinking column names change data types
Confusing column names with sorting
Believing column names delete rows
2. Which of the following is the correct way to specify column names when creating a DataFrame from a list of lists?
easy
A. pd.DataFrame(data, columns=['Name', 'Age'])
B. pd.DataFrame(data, index=['Name', 'Age'])
C. pd.DataFrame(data, labels=['Name', 'Age'])
D. pd.DataFrame(data, names=['Name', 'Age'])
Solution
Step 1: Recall DataFrame syntax
To name columns, use the 'columns' parameter with a list of names.
Step 2: Identify correct option
Only pd.DataFrame(data, columns=['Name', 'Age']) uses 'columns' correctly; others use invalid parameters.
Final Answer:
pd.DataFrame(data, columns=['Name', 'Age']) -> Option A
Quick Check:
Use 'columns' to name columns [OK]
Hint: Use 'columns' parameter to name columns in DataFrame [OK]
Common Mistakes:
Using 'index' to name columns instead of rows
Using non-existent parameters like 'labels' or 'names'
Confusing column names with index labels
3. What will be the output of this code?
import pandas as pd
data = [[10, 20], [30, 40]]
df = pd.DataFrame(data, columns=['A', 'B'], index=['row1', 'row2'])
print(df)
medium
A. A table with default numeric columns and rows indexed as 'row1' and 'row2'
B. A table with columns named 'A' and 'B' and rows indexed as 'row1' and 'row2'
C. A table with columns named 'A' and 'B' and default numeric row indices
D. SyntaxError due to wrong parameters
Solution
Step 1: Analyze DataFrame creation
Columns are set to ['A', 'B'] and index to ['row1', 'row2'], so labels replace defaults.
Step 2: Predict printed output
Printed DataFrame shows data with specified column names and row indices.
Final Answer:
A table with columns named 'A' and 'B' and rows indexed as 'row1' and 'row2' -> Option B
Quick Check:
Columns and index labels set correctly [OK]
Hint: Columns and index parameters label columns and rows respectively [OK]
Common Mistakes:
Assuming default numeric indices when index is specified
Confusing columns and index parameters
Expecting syntax error with correct parameters
4. Identify the error in this code snippet:
import pandas as pd
data = [[1, 2], [3, 4]]
df = pd.DataFrame(data, columns='X,Y', index=['r1', 'r2'])
print(df)
medium
A. Data should be a dictionary, not a list
B. The index list length does not match data rows
C. The columns parameter should be a list, not a string
D. print(df) is missing parentheses
Solution
Step 1: Check columns parameter type
Columns must be a list of strings, but 'X,Y' is a single string.
Step 2: Understand impact
Passing a string causes pandas to treat each character as a column name, leading to unexpected columns.
Final Answer:
The columns parameter should be a list, not a string -> Option C
Quick Check:
Columns must be list, not string [OK]
Hint: Always use list for columns, not a comma string [OK]
Common Mistakes:
Passing columns as a comma-separated string
Ignoring mismatch between index length and data rows
Thinking print needs no parentheses in Python 3
5. You have this nested list:
data = [[1, 2], [3, 4], [5, 6]]
You want to create a DataFrame with columns named 'X' and 'Y' and index labels as 'a', 'b', 'c'. Which code correctly does this?
hard
A. pd.DataFrame(data, columns=['X', 'Y'], index=['a', 'b', 'c'])
B. pd.DataFrame(data, columns=['a', 'b', 'c'], index=['X', 'Y'])
C. pd.DataFrame(data, index=['X', 'Y'], columns=['a', 'b', 'c'])
D. pd.DataFrame(data, labels=['X', 'Y'], rows=['a', 'b', 'c'])
Solution
Step 1: Match columns and index to data shape
Data has 3 rows and 2 columns, so columns list must have 2 names and index list 3 labels.
Step 2: Identify correct parameter usage
pd.DataFrame(data, columns=['X', 'Y'], index=['a', 'b', 'c']) correctly uses columns=['X', 'Y'] and index=['a', 'b', 'c'] matching data shape.
Final Answer:
pd.DataFrame(data, columns=['X', 'Y'], index=['a', 'b', 'c']) -> Option A
Quick Check:
Columns and index match data shape [OK]
Hint: Columns = data columns, index = data rows labels [OK]
Common Mistakes:
Swapping columns and index lists
Using wrong parameter names like 'labels' or 'rows'
Mismatching list lengths with data shape
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.