Как правило, заголовки столбцов должны иметь такое же выравнивание, что и данные в столбцах. то есть вправо для числового значения и слева для текстового.
df.style.set_properties(subset=df.columns[~numeric_col_mask],**{'text-align': 'left'})
Данные выровнены по левому краю, но заголовки по-прежнему выровнены по правому краю.
Как получить конкретные заголовки по левому краютоже