@@ -347,6 +347,12 @@ def to_latex(self, force_unicode=None, column_format=None):
347
347
"""
348
348
Render a DataFrame to a LaTeX tabular environment output.
349
349
"""
350
+ def get_col_type (dtype ):
351
+ if issubclass (dtype .type , np .number ):
352
+ return 'r'
353
+ else :
354
+ return 'l'
355
+
350
356
import warnings
351
357
if force_unicode is not None : # pragma: no cover
352
358
warnings .warn (
@@ -362,27 +368,28 @@ def to_latex(self, force_unicode=None, column_format=None):
362
368
strcols = [[info_line ]]
363
369
else :
364
370
strcols = self ._to_str_columns ()
365
-
371
+
366
372
if column_format is None :
367
- column_format = '|l|%s|' % '|' .join ('c' for _ in strcols )
373
+ dtypes = self .frame .dtypes .values
374
+ column_format = 'l%s' % '' .join (map (get_col_type , dtypes ))
368
375
elif not isinstance (column_format , basestring ):
369
376
raise AssertionError (('column_format must be str or unicode, not %s'
370
377
% type (column_format )))
371
378
372
379
self .buf .write ('\\ begin{tabular}{%s}\n ' % column_format )
373
- self .buf .write ('\\ hline \n ' )
380
+ self .buf .write ('\\ toprule \n ' )
374
381
375
382
nlevels = frame .index .nlevels
376
383
for i , row in enumerate (izip (* strcols )):
377
384
if i == nlevels :
378
- self .buf .write ('\\ hline \n ' ) # End of header
385
+ self .buf .write ('\\ midrule \n ' ) # End of header
379
386
crow = [(x .replace ('_' , '\\ _' )
380
387
.replace ('%' , '\\ %' )
381
388
.replace ('&' , '\\ &' ) if x else '{}' ) for x in row ]
382
389
self .buf .write (' & ' .join (crow ))
383
390
self .buf .write (' \\ \\ \n ' )
384
391
385
- self .buf .write ('\\ hline \n ' )
392
+ self .buf .write ('\\ bottomrule \n ' )
386
393
self .buf .write ('\\ end{tabular}\n ' )
387
394
388
395
def _format_col (self , i ):
0 commit comments