@@ -222,33 +222,39 @@ def to_html(self):
222
222
"""
223
223
Render a DataFrame to a html table.
224
224
"""
225
- def write (buf , s , indent = 0 ):
226
- buf .write (unicode ((' ' * indent ) + str (s ) + '\n ' ))
225
+ def _str (x ):
226
+ if not isinstance (x , basestring ):
227
+ return str (x )
228
+ return x
227
229
228
- def write_th (buf , s , indent = 0 ):
229
- write (buf , '<th>%s</th>' % str (s ), indent )
230
+ elements = []
231
+ def write (s , indent = 0 ):
232
+ elements .append (' ' * indent + _str (s ))
230
233
231
- def write_td (buf , s , indent = 0 ):
232
- write (buf , '<td>%s</td>' % str (s ), indent )
233
234
234
- def write_tr (buf , l , indent = 0 , indent_delta = 4 , header = False ):
235
- write (buf , '<tr>' , indent )
235
+ def write_th (s , indent = 0 ):
236
+ write ('<th>%s</th>' % _str (s ), indent )
237
+
238
+ def write_td (s , indent = 0 ):
239
+ write ('<td>%s</td>' % _str (s ), indent )
240
+
241
+ def write_tr (l , indent = 0 , indent_delta = 4 , header = False ):
242
+ write ('<tr>' , indent )
236
243
indent += indent_delta
237
244
if header :
238
245
for s in l :
239
- write_th (buf , s , indent )
246
+ write_th (s , indent )
240
247
else :
241
248
for s in l :
242
- write_td (buf , s , indent )
249
+ write_td (s , indent )
243
250
indent -= indent_delta
244
- write (buf , '</tr>' , indent )
251
+ write ('</tr>' , indent )
245
252
246
253
indent = 0
247
254
indent_delta = 2
248
255
frame = self .frame
249
- buf = self .buf
250
256
251
- write (buf , '<table border="1">' , indent )
257
+ write ('<table border="1">' , indent )
252
258
253
259
def _column_header ():
254
260
row = ['' ] * (frame .index .nlevels - 1 )
@@ -263,31 +269,30 @@ def _column_header():
263
269
return row
264
270
265
271
if len (frame .columns ) == 0 or len (frame .index ) == 0 :
266
- write (buf , '<tbody>' , indent + indent_delta )
267
- write_tr (buf ,
268
- [repr (frame .index ),
272
+ write ('<tbody>' , indent + indent_delta )
273
+ write_tr ([repr (frame .index ),
269
274
'Empty %s' % type (self .frame ).__name__ ],
270
275
indent + (2 * indent_delta ),
271
276
indent_delta )
272
- write (buf , '</tbody>' , indent + indent_delta )
277
+ write ('</tbody>' , indent + indent_delta )
273
278
else :
274
279
indent += indent_delta
275
280
276
281
# header row
277
282
if self .header :
278
- write (buf , '<thead>' , indent )
283
+ write ('<thead>' , indent )
279
284
row = []
280
285
281
286
col_row = _column_header ()
282
287
indent += indent_delta
283
- write_tr (buf , col_row , indent , indent_delta , header = True )
288
+ write_tr (col_row , indent , indent_delta , header = True )
284
289
if self .has_index_names :
285
290
row = frame .index .names + ['' ] * len (self .columns )
286
- write_tr (buf , row , indent , indent_delta , header = True )
291
+ write_tr (row , indent , indent_delta , header = True )
287
292
288
- write (buf , '</thead>' , indent )
293
+ write ('</thead>' , indent )
289
294
290
- write (buf , '<tbody>' , indent )
295
+ write ('<tbody>' , indent )
291
296
292
297
_bold_row = self .kwds .get ('bold_rows' , False )
293
298
def _maybe_bold_row (x ):
@@ -311,12 +316,14 @@ def _maybe_bold_row(x):
311
316
row .append (_maybe_bold_row (frame .index [i ]))
312
317
for col in self .columns :
313
318
row .append (fmt_values [col ][i ])
314
- write_tr (buf , row , indent , indent_delta )
319
+ write_tr (row , indent , indent_delta )
315
320
indent -= indent_delta
316
- write (buf , '</tbody>' , indent )
321
+ write ('</tbody>' , indent )
317
322
indent -= indent_delta
318
323
319
- write (buf , '</table>' , indent )
324
+ write ('</table>' , indent )
325
+
326
+ _put_lines (self .buf , elements )
320
327
321
328
def _get_formatted_column_labels (self ):
322
329
from pandas .core .index import _sparsify
@@ -768,6 +775,12 @@ def reset(self):
768
775
print_config = _GlobalPrintConfig ()
769
776
770
777
778
+ def _put_lines (buf , lines ):
779
+ if any (isinstance (x , unicode ) for x in lines ):
780
+ lines = [unicode (x ) for x in lines ]
781
+ print >> buf , '\n ' .join (lines )
782
+
783
+
771
784
if __name__ == '__main__' :
772
785
arr = np .array ([746.03 , 0.00 , 5620.00 , 1592.36 ])
773
786
# arr = np.array([11111111.1, 1.55])
0 commit comments