def clean_column_names(df):
"""Return a copy with normalized column names."""
result = df.copy()
result.columns = (
result.columns
.str.strip()
.str.lower()
.str.replace(r"\s+", "_", regex=True)
.str.replace(r"[^a-z0-9_]", "", regex=True)
)
return result20 Recipe: Clean Column Names
20.1 Task
Convert column names into lowercase identifiers separated by underscores.
20.2 Example
import pandas as pd
raw = pd.DataFrame(columns=["City Name", "Total Value (%)"])
clean = clean_column_names(raw)
print(clean.columns.tolist())20.3 Expected result
['city_name', 'total_value_']
Review the result because removing punctuation may create unclear or duplicated names.