Hi, just a remark to point out a rudimentary way to grab cat. and num. columns:
D = data.dtypes
categ = [k for k in D.keys() if D[k]=="object"]
numer = [k for k in D.keys() if D[k]!="object"]
seems to work. Indeed, i consider that not(object dtype) is numerical (it can be float64 or int64 in fact)