@@ -338,19 +338,38 @@ def df_aslarray(df, sort_rows=False, sort_columns=False, raw=False, parse_header
338338# SERIES <--> AXIS, GROUP, META #
339339# #################################### #
340340
341+ def _extract_labels_from_series (series ):
342+ # remove trailing NaN or None values
343+ # (multiple Axis or Group objects of different lengths
344+ # are stored in the same DataFrame leading to trailing
345+ # NaNs or None values when split into series)
346+ series = series .loc [:series .last_valid_index ()]
347+
348+ labels = np .asarray (series .values )
349+ # integer labels of axes or groups may have been converted to float values
350+ # because of trailing NaNs
351+ if labels .dtype .kind == 'f' and all ([label .is_integer () for label in labels ]):
352+ labels = labels .astype (int )
353+ # if dtype is still object, we assume values are strings
354+ if labels .dtype .kind == 'O' :
355+ labels = labels .astype (str )
356+ return labels
357+
358+
341359def _axis_to_series (key , axis , dtype = None ):
342360 name = '{}:{}' .format (key , axis .name )
343361 return pd .Series (data = axis .labels , name = name , dtype = dtype )
344362
345363
346364def _series_to_axis (series ):
347365 name = str (series .name )
366+ labels = _extract_labels_from_series (series )
348367 if ':' in name :
349368 key , axis_name = name .split (':' )
350369 else :
351370 # for backward compatibility
352371 key = axis_name = name
353- return key , Axis (labels = series . values , name = axis_name )
372+ return key , Axis (labels = labels , name = axis_name )
354373
355374
356375def _group_to_series (key , group , dtype = None ):
@@ -366,7 +385,8 @@ def _series_to_group(series, axes):
366385 if group_name == 'None' :
367386 group_name = None
368387 axis = axes [axis_name ]
369- return key , LGroup (key = series .values , name = group_name , axis = axis )
388+ group_key = _extract_labels_from_series (series )
389+ return key , LGroup (key = group_key , name = group_name , axis = axis )
370390
371391
372392# ######################################## #
0 commit comments