The key limitation of `.describe()` is that the columns must be of the correct data types. Sometimes integers are used to communicate non-numeric data such as model numbers. A mean, median or percentile of an iPhone model number isn't meaningful e.g. 11.25. This means the data must already be clean or reasonably clean.
Secondly, your focus appears to be on at a dataframe level. But for individual columns there are other useful functions such as `.unique()`, `.value_counts()` etc that are also very helpful without drawing a single plot.