categorical_cols = ['a', 'b', 'c', 'd']
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
data[categorical_cols] = data[categorical_cols].apply(lambda col: le.fit_transform(col))
from sklearn.preprocessing import OneHotEncoder
ohe = OneHotEncoder()
array_hot_encoded = ohe.fit_transform(data[categorical_cols])
data_hot_encoded = pd.DataFrame(array_hot_encoded, index=data.index)
data_other_cols = data.drop(columns=categorical_cols)
data_out = pd.concat([data_hot_encoded, data_other_cols], axis=1)