Inspect DataFrame labels, types, dimensions, values and styling; select by label or position and replace removed legacy attributes.
Show Table of Contents ↓Select an operation below for the full examples. The reference material further down remains available.

import pandas as pd
my_data = pd.DataFrame({"NAME": ["Ravi", "Raju", "Alex", "Ron", "King", "Jack"],
"ID": [1, 2, 3, 4, 5, 6], "MATH": [30, 40, 50, 60, 70, 80],
"ENGLISH": [20, 30, 40, 50, 60, 70]})
print(my_data)
assert my_data.shape == (6, 4)Expected output
NAME ID MATH ENGLISH
0 Ravi 1 30 20
1 Raju 2 40 30
2 Alex 3 50 40
3 Ron 4 60 50
4 King 5 70 60
5 Jack 6 80 70names = dir(my_data)
print([name for name in ["columns", "index", "shape", "size", "ndim", "empty", "dtypes", "loc", "iloc"] if name in names])
assert all(name in names for name in ["columns", "loc", "shape"])
assert "DataFrame" in dir(pd)Expected output
['columns', 'index', 'shape', 'size', 'ndim', 'empty', 'dtypes', 'loc', 'iloc']transposed = my_data.T
print(transposed)
assert transposed.shape == (4, 6)
assert transposed.loc["MATH", 2] == 50
assert my_data.shape == (6, 4)Expected output
0 1 2 3 4 5
NAME Ravi Raju Alex Ron King Jack
ID 1 2 3 4 5 6
MATH 30 40 50 60 70 80
ENGLISH 20 30 40 50 60 70print(my_data.at[3, "ENGLISH"])
assert my_data.at[3, "ENGLISH"] == 50Expected output
50print(my_data.columns)
print(my_data.columns.tolist())
assert my_data.columns.tolist() == ["NAME", "ID", "MATH", "ENGLISH"]Expected output
Index(['NAME', 'ID', 'MATH', 'ENGLISH'], dtype='str')
['NAME', 'ID', 'MATH', 'ENGLISH']print(my_data.dtypes)
assert pd.api.types.is_integer_dtype(my_data["MATH"])
assert my_data["NAME"].iloc[0] == "Ravi"Expected output
NAME str
ID int64
MATH int64
ENGLISH int64
dtype: objectprint("Student table empty:", my_data.empty)
print("No rows:", my_data.iloc[:0].empty)
print("No columns:", my_data.iloc[:, :0].empty)
missing = pd.DataFrame({"mark": [float("nan")]})
print("All-missing table empty:", missing.empty)
assert not missing.empty and missing.isna().all().all()Expected output
Student table empty: False
No rows: True
No columns: True
All-missing table empty: Falseprint(my_data.iat[2, 3])
assert my_data.iat[2, 3] == 40Expected output
40selected = my_data.iloc[1:3, [0, 2]]
print(selected)
assert selected["NAME"].tolist() == ["Raju", "Alex"]Expected output
NAME MATH
1 Raju 40
2 Alex 50print(my_data.index)
labeled = my_data.set_index("ID")
print("Label 3 MATH:", labeled.at[3, "MATH"])
print("Position 3 MATH:", labeled.iloc[3]["MATH"])
assert labeled.at[3, "MATH"] == 50
assert labeled.iloc[3]["MATH"] == 60Expected output
RangeIndex(start=0, stop=6, step=1)
Label 3 MATH: 50
Position 3 MATH: 60independent = my_data.copy(deep=True)
independent.loc[0, "MATH"] = 99
print("Original mark:", my_data.at[0, "MATH"])
print("Copied mark:", independent.at[0, "MATH"])
assert my_data.at[0, "MATH"] == 30Expected output
Original mark: 30
Copied mark: 99print(my_data.loc[2, "MATH"])
assert my_data.loc[2, "MATH"] == 50Expected output
50print(my_data.loc[1:2, ["NAME", "MATH"]])
passed = my_data.loc[my_data["MATH"].ge(60), ["NAME", "MATH"]]
print(passed)
assert passed["NAME"].tolist() == ["Ron", "King", "Jack"]Expected output
NAME MATH
1 Raju 40
2 Alex 50
NAME MATH
3 Ron 60
4 King 70
5 Jack 80print("ndim:", my_data.ndim)
print("shape:", my_data.shape)
print("size:", my_data.size)
assert my_data.ndim == 2 and my_data.size == 24
assert my_data.size == my_data.shape[0] * my_data.shape[1]Expected output
ndim: 2
shape: (6, 4)
size: 24import importlib.util
if importlib.util.find_spec("jinja2") is None:
print("Styler HTML skipped: install Jinja2, then rerun this cell")
else:
styled = my_data.style.format({"MATH": "{:.0f}", "ENGLISH": "{:.0f}"})
table_html = styled.to_html()
assert "<table" in table_html and "Ravi" in table_html
print("Styler HTML generated and checked")
assert my_data.at[0, "MATH"] == 30Expected output
Styler HTML skipped: install Jinja2, then rerun this cellprint(my_data.values)
array = my_data.to_numpy(copy=True)
print("Array shape:", array.shape)
print("Array dtype:", array.dtype)
assert array.shape == (6, 4) and array[2, 0] == "Alex"
assert array[2, 2] == 50Expected output
[['Ravi' 1 30 20]
['Raju' 2 40 30]
['Alex' 3 50 40]
['Ron' 4 60 50]
['King' 5 70 60]
['Jack' 6 80 70]]
Array shape: (6, 4)
Array dtype: objectsubset = my_data.loc[my_data["NAME"].isin(["King", "Jack"]), ["NAME", "MATH"]]
print(subset)
print("Shape:", subset.shape)
print("Jack mark:", subset.at[5, "MATH"])
assert subset.shape == (2, 2) and subset.at[5, "MATH"] == 80Expected output
NAME MATH
4 King 70
5 Jack 80
Shape: (2, 2)
Jack mark: 80Open in Google Colab View on GitHub
Run examples in order, inspect table attributes and try the exercise. Save a copy to keep edits.
Reference: Pandas DataFrame Attributes documentation.
Author & Instructor at plus2net
I write and maintain practical tutorials on Python, PHP, SQL, JavaScript, HTML, jQuery, and web development at plus2net. The tutorials focus on clear explanations, working examples, and code that readers can test and adapt while learning.