rename changes labels with a dictionary of old name to new name:
df = df.rename(columns={"unit_price": "price"})
Like most pandas methods it returns a new DataFrame, so store the result, or the old names come back in the next cell.
To tidy every header at once, work on df.columns, which has the same .str methods as a text column: df.columns = df.columns.str.lower().str.replace(" ", "_").
drop removes rows or columns by label:
df.drop(columns=["notes"]) removes columns.
df.drop(index=[0, 1]) removes rows by their index label (to drop rows by a condition, filter instead).
errors="ignore" skips labels that aren't there, which keeps a cleanup script from failing on a file that lacks a column.