Может быть, есть лучший способ, но вы можете заметить, что максимальная длина для типа равна 50. Давайте создадим пример
import pandas as pd
n = 4001
df = pd.DataFrame({"a":["wcewcvevc"] * n ,
"b":["2019-01-01"] * n,
"c":[1.01] * n,
"d":[25] * n})
df["b"] = df["b"].astype("M8[us]")
out = []
for col in df.columns:
out.append([len(str(type(df[col].iloc[4000]))),len(str(df[col].iloc[4000]))])
pd.DataFrame(out).max().tolist()
# output [50, 19]
# then you can define a layout as
lyt = "{:<55}{:24}"
# and print
for col in df.columns:
print(lyt.format(str(type(df[col].iloc[4000])), str(df[col].iloc[4000])))
и получим
<class 'str'> wcewcvevc
<class 'pandas._libs.tslibs.timestamps.Timestamp'> 2019-01-01 00:00:00
<class 'numpy.float64'> 1.01
<class 'numpy.int64'> 25