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