Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Print pretty data.frames/tables to console

Is there a way to print small data.frames to the console in a more readable manner?

For example, would it be possible to output to the console:

library(MASS)    iris[1:5, ]    Sepal.Length Sepal.Width Petal.Length Petal.Width Species 1          5.1         3.5          1.4         0.2  setosa 2          4.9         3.0          1.4         0.2  setosa 3          4.7         3.2          1.3         0.2  setosa 4          4.6         3.1          1.5         0.2  setosa 5          5.0         3.6          1.4         0.2  setosa 

as

iris[1:5, ]    +--------------+-------------+--------------+-------------+---------+   | Sepal.Length | Sepal.Width | Petal.Length | Petal.Width | Species |   +--------------+-------------+--------------+-------------+---------+ 1 |          5.1 |         3.5 |          1.4 |         0.2 |  setosa | 2 |          4.9 |         3.0 |          1.4 |         0.2 |  setosa | 3 |          4.7 |         3.2 |          1.3 |         0.2 |  setosa | 4 |          4.6 |         3.1 |          1.5 |         0.2 |  setosa | 5 |          5.0 |         3.6 |          1.4 |         0.2 |  setosa |   +--------------+-------------+--------------+-------------+---------+ 

I realise for large data.frames it would take up an unnecessary amount of time, but if it's an option, I would like to be able to look at small frames in a more structured manner.

In particular, when I have two text fields next to each other, it would be much easier with a pipe between the two fields to separate them, as the spacing between words is the same size as the spacing between columns.

Thanks

like image 904
Akhil Nair Avatar asked Sep 03 '15 11:09

Akhil Nair


People also ask

How do I print a pretty data frame?

You can pretty print pandas dataframe using pd. set_option('display. max_columns', None) statement. Usecase: Your dataframe may contain many columns and when you print it normally, you'll only see few columns.

How do I view full Dataframe in Jupyter?

To show the full data without any hiding, you can use pd. set_option('display. max_rows', 500) and pd. set_option('display.


2 Answers

In case it helps anyone, I just stumbled across the fact that knitr's kable achieves a nice pretty print. Combine with some of the .Rprofile suggestions above, this seems to achieve what I had in mind.

> knitr::kable(head(iris))  | Sepal.Length| Sepal.Width| Petal.Length| Petal.Width|Species | |------------:|-----------:|------------:|-----------:|:-------| |          5.1|         3.5|          1.4|         0.2|setosa  | |          4.9|         3.0|          1.4|         0.2|setosa  | |          4.7|         3.2|          1.3|         0.2|setosa  | |          4.6|         3.1|          1.5|         0.2|setosa  | |          5.0|         3.6|          1.4|         0.2|setosa  | |          5.4|         3.9|          1.7|         0.4|setosa  | 
like image 109
Akhil Nair Avatar answered Sep 23 '22 10:09

Akhil Nair


I had the same problem recently and came across the huxtable package. It is very flexible and maybe a litte overkill for just nicer console output, but it served me very well.

Here is how you could solve your problem using huxtable:

library(huxtable) library(magrittr)  small_iris <- iris[1:5, ]  iris_hux <-    hux(small_iris) %>%    add_colnames() %>%    set_bold(row = 1, col = everywhere, value = TRUE) %>%    set_all_borders(TRUE) 

I think all functions speak for themselves. For a thorough introduction, see https://hughjonesd.github.io/huxtable/huxtable.html#adding-row-and-column-names.

print_screen(iris_hux) yield this output (in the console!):

enter image description here

I have not figured out yet how to suppress the bottom information on the column names. So if someone knows, please comment!

EDIT: In order to suppress the column names at the bottom, use colnames = FALSE inside print_screen().

like image 45
der_grund Avatar answered Sep 23 '22 10:09

der_grund