5
5
# pylint: disable=E1101,E1103
6
6
# pylint: disable=W0703,W0622,W0613,W0201
7
7
8
+ from itertools import izip
8
9
import csv
9
- import itertools
10
10
import operator
11
11
12
12
from numpy import nan , ndarray
@@ -336,21 +336,23 @@ def __repr__(self):
336
336
if len (self .index ) > 500 :
337
337
result = self ._tidy_repr (30 )
338
338
elif len (self .index ) > 0 :
339
- result = self ._get_repr (name = True )
339
+ result = self ._get_repr (print_header = True ,
340
+ length = len (self ) > 50 ,
341
+ name = True )
340
342
else :
341
343
result = '%s' % ndarray .__repr__ (self )
342
344
343
- if self .index .name is not None :
344
- result = '%s\n %s' % (self .index .name , result )
345
-
346
345
return result
347
346
348
347
def _tidy_repr (self , max_vals = 20 ):
349
348
num = max_vals // 2
350
- head = self [:num ]._get_repr (name = False )
351
- tail = self [- (max_vals - num ):]._get_repr (name = False )
349
+ head = self [:num ]._get_repr (print_header = True , length = False ,
350
+ name = False )
351
+ tail = self [- (max_vals - num ):]._get_repr (print_header = False ,
352
+ length = False ,
353
+ name = False )
352
354
result = head + '\n ...\n ' + tail
353
- namestr = ( "Name: %s, " % self .name ) if self .name else ""
355
+ namestr = "Name: %s, " % self .name if self .name else ""
354
356
result = '%s\n %sLength: %d' % (result , namestr , len (self ))
355
357
return result
356
358
@@ -367,43 +369,46 @@ def to_string(self, buf=None, na_rep='NaN', nanRep=None):
367
369
else :
368
370
print >> buf , the_repr
369
371
370
- def _get_repr (self , name = False , na_rep = 'NaN' ):
372
+ def _get_repr (self , name = False , print_header = False , length = True ,
373
+ na_rep = 'NaN' ):
371
374
vals = self .values
372
375
index = self .index
373
376
374
377
is_multi = isinstance (index , MultiIndex )
375
378
if is_multi :
379
+ have_header = any (name for name in index .names )
376
380
string_index = index .format (names = True )
377
381
header , string_index = string_index [0 ], string_index [1 :]
378
382
else :
383
+ have_header = index .name is not None
384
+ header = index .name
379
385
string_index = index .format ()
380
386
381
387
maxlen = max (len (x ) for x in string_index )
382
388
padSpace = min (maxlen , 60 )
383
389
384
- def _format_float (k , v ):
385
- if np . isnan (v ):
390
+ def _format (k , v ):
391
+ if isnull (v ):
386
392
v = na_rep
387
- else :
388
- v = str (v )
389
393
return '%s %s' % (str (k ).ljust (padSpace ), v )
390
394
391
- def _format_nonfloat (k , v ):
392
- return '%s %s' % (str (k ).ljust (padSpace ), v )
393
-
394
- if vals .dtype == np .float_ :
395
- _format = _format_float
396
- else :
397
- _format = _format_nonfloat
395
+ it = [_format (idx , v ) for idx , v in izip (string_index , vals )]
398
396
399
- it = itertools .starmap (_format ,
400
- itertools .izip (string_index , vals ))
401
- it = list (it )
402
- if is_multi and any (name for name in index .names ):
397
+ if print_header and have_header :
403
398
it .insert (0 , header )
399
+
400
+ footer = ''
404
401
if name :
405
- namestr = ("Name: %s, " % self .name ) if self .name else ""
406
- it .append ('%sLength: %d' % (namestr , len (self )))
402
+ footer += "Name: %s" % self .name if self .name else ''
403
+
404
+ if length :
405
+ if footer :
406
+ footer += ', '
407
+ footer += 'Length: %d' % len (self )
408
+
409
+ if footer :
410
+ it .append (footer )
411
+
407
412
return '\n ' .join (it )
408
413
409
414
def __str__ (self ):
@@ -416,7 +421,7 @@ def iteritems(self):
416
421
"""
417
422
Lazily iterate over (index, value) tuples
418
423
"""
419
- return itertools . izip (iter (self .index ), iter (self ))
424
+ return izip (iter (self .index ), iter (self ))
420
425
421
426
iterkv = iteritems
422
427
if py3compat .PY3 : # pragma: no cover
0 commit comments