@@ -437,17 +437,24 @@ def _format_data(self):
437437 from pandas .core .format import get_console_size
438438 display_width , _ = get_console_size ()
439439 if display_width is None :
440- display_width = get_option ('display.width' )
440+ display_width = get_option ('display.width' ) or 80
441441
442442 space1 = "\n %s" % (' ' * (len (self .__class__ .__name__ ) + 1 ))
443443 space2 = "\n %s" % (' ' * (len (self .__class__ .__name__ ) + 2 ))
444444
445+ n = len (self )
445446 sep = ','
446447 max_seq_items = get_option ('display.max_seq_items' )
447448 formatter = self ._formatter_func
448- needs_justify = self .inferred_type in ['string' ,'categorical' ]
449+
450+ # do we want to justify (only do so for non-objects)
451+ is_justify = not (self .inferred_type == 'string' or self .inferred_type == 'categorical' and is_object_dtype (self .categories ))
452+
453+ # are we a truncated display
454+ is_truncated = n > max_seq_items
449455
450456 def _extend_line (s , line , value , display_width , next_line_prefix ):
457+
451458 if len (line .rstrip ()) + len (value .rstrip ()) >= display_width :
452459 s += line .rstrip ()
453460 line = next_line_prefix
@@ -460,7 +467,6 @@ def best_len(values):
460467 else :
461468 return 0
462469
463- n = len (self )
464470 if n == 0 :
465471 summary = '[], '
466472 elif n == 1 :
@@ -471,26 +477,23 @@ def best_len(values):
471477 last = formatter (self [- 1 ])
472478 summary = '[%s, %s], ' % (first , last )
473479 else :
480+
474481 if n > max_seq_items :
475482 n = min (max_seq_items // 2 ,10 )
476483 head = [ formatter (x ) for x in self [:n ] ]
477484 tail = [ formatter (x ) for x in self [- n :] ]
478- summary_insert = True
479485 else :
480486 head = []
481487 tail = [ formatter (x ) for x in self ]
482- summary_insert = False
483-
484- if needs_justify :
485- justify = False
486- else :
487- justify = True
488488
489489 # adjust all values to max length if needed
490- if justify :
491- max_len = max (best_len (head ), best_len (tail ))
492- head = [x .rjust (max_len ) for x in head ]
493- tail = [x .rjust (max_len ) for x in tail ]
490+ if is_justify :
491+
492+ # however, if we are not truncated and we are only a single line, then don't justify
493+ if is_truncated or not (len (', ' .join (head )) < display_width and len (', ' .join (tail )) < display_width ):
494+ max_len = max (best_len (head ), best_len (tail ))
495+ head = [x .rjust (max_len ) for x in head ]
496+ tail = [x .rjust (max_len ) for x in tail ]
494497
495498 summary = ""
496499 line = space2
@@ -499,7 +502,7 @@ def best_len(values):
499502 word = head [i ] + sep + ' '
500503 summary , line = _extend_line (summary , line , word ,
501504 display_width , space2 )
502- if summary_insert :
505+ if is_truncated :
503506 summary += line + space2 + '...'
504507 line = space2
505508
0 commit comments