title: How can I get a similar summary of a Pandas dataframe as in R?
body: <p>Different scales allow different types of operations. I would like to specify the scale of a column in a dataframe <code>df</code>. Then, <code>df.describe()</code> should take this into account.</p>
  
  <h2>Examples</h2>
  
  <ul>
  <li><strong>Nominal scale</strong>: A nominal scale only allows to check for equivalence. Examples for this are sex, names, city names. You can basically only count how often they appear and give the most common ones (the mode).</li>
  <li><strong>Ordinal scale</strong>: You can order, but not say how far one is away from another. Cloth sizes are one example. You can calculate the median / min / max for this scale.</li>
  <li><strong>Quantitative scales</strong>: You can calculate the mean, standard deviation, quantiles for those scales.</li>
  </ul>
  
  <h2>Code example</h2>
  
  <pre><code>import pandas as pd
  import pandas.rpy.common as rcom
  df = rcom.load_data('mtcars')
  print(df.describe())
  </code></pre>
  
  <p>gives</p>
  
  <pre><code>             mpg        cyl        disp          hp       drat         wt  \
  count  32.000000  32.000000   32.000000   32.000000  32.000000  32.000000   
  mean   20.090625   6.187500  230.721875  146.687500   3.596563   3.217250   
  std     6.026948   1.785922  123.938694   68.562868   0.534679   0.978457   
  min    10.400000   4.000000   71.100000   52.000000   2.760000   1.513000   
  25%    15.425000   4.000000  120.825000   96.500000   3.080000   2.581250   
  50%    19.200000   6.000000  196.300000  123.000000   3.695000   3.325000   
  75%    22.800000   8.000000  326.000000  180.000000   3.920000   3.610000   
  max    33.900000   8.000000  472.000000  335.000000   4.930000   5.424000   
  
              qsec         vs         am       gear     carb  
  count  32.000000  32.000000  32.000000  32.000000  32.0000  
  mean   17.848750   0.437500   0.406250   3.687500   2.8125  
  std     1.786943   0.504016   0.498991   0.737804   1.6152  
  min    14.500000   0.000000   0.000000   3.000000   1.0000  
  25%    16.892500   0.000000   0.000000   3.000000   2.0000  
  50%    17.710000   0.000000   0.000000   4.000000   2.0000  
  75%    18.900000   1.000000   1.000000   4.000000   4.0000  
  max    22.900000   1.000000   1.000000   5.000000   8.0000  
  </code></pre>
  
  <p>This is not good as <code>vs</code> is a binary variable which indicates if the car has a v-engine or a straight engine (<a href="https://stackoverflow.com/a/18617340/562769">source</a>). Hence the feature is of nominal scale. Hence min / max / std / mean are not applicable. It should rather be counted how often 0 and 1 appear.</p>
  
  <p>In R, you can do the following:</p>
  
  <pre><code>mtcars$vs = factor(mtcars$vs, levels=c(0, 1), labels=c("straight engine", "V-Engine"))
  mtcars$am = factor(mtcars$am, levels=c(0, 1), labels=c("Automatic", "Manual"))
  mtcars$gear = factor(mtcars$gear)
  mtcars$carb = factor(mtcars$carb)
  summary(mtcars)
  </code></pre>
  
  <p>and get</p>
  
  <pre><code>      mpg             cyl             disp             hp             drat      
   Min.   :10.40   Min.   :4.000   Min.   : 71.1   Min.   : 52.0   Min.   :2.760  
   1st Qu.:15.43   1st Qu.:4.000   1st Qu.:120.8   1st Qu.: 96.5   1st Qu.:3.080  
   Median :19.20   Median :6.000   Median :196.3   Median :123.0   Median :3.695  
   Mean   :20.09   Mean   :6.188   Mean   :230.7   Mean   :146.7   Mean   :3.597  
   3rd Qu.:22.80   3rd Qu.:8.000   3rd Qu.:326.0   3rd Qu.:180.0   3rd Qu.:3.920  
   Max.   :33.90   Max.   :8.000   Max.   :472.0   Max.   :335.0   Max.   :4.930  
         wt             qsec                     vs             am     gear   carb  
   Min.   :1.513   Min.   :14.50   straight engine:18   Automatic:19   3:15   1: 7  
   1st Qu.:2.581   1st Qu.:16.89   V-Engine       :14   Manual   :13   4:12   2:10  
   Median :3.325   Median :17.71                                       5: 5   3: 3  
   Mean   :3.217   Mean   :17.85                                              4:10  
   3rd Qu.:3.610   3rd Qu.:18.90                                              6: 1  
   Max.   :5.424   Max.   :22.90                                              8: 1  
  </code></pre>
  
  <p>Is something similar also possible with Pandas?</p>
  
  <p>I tried</p>
  
  <pre><code>df["vs"] = df["vs"].astype('category')
  </code></pre>
  
  <p>But this makes <code>"vs"</code> disappear from the description.</p>