|
1 | 1 | from __future__ import absolute_import, print_function |
2 | 2 |
|
| 3 | +import re |
3 | 4 | from itertools import product |
4 | 5 | from collections import OrderedDict |
5 | 6 |
|
@@ -140,6 +141,9 @@ def from_series(s, sort_rows=False, fill_value=nan, meta=None, **kwargs): |
140 | 141 | return LArray(s.values, Axis(s.index.values, name), meta=meta) |
141 | 142 |
|
142 | 143 |
|
| 144 | +_anonymous_axis_pattern = re.compile(r'\{(\d+|\??)\}\*?') |
| 145 | + |
| 146 | + |
143 | 147 | def from_frame(df, sort_rows=False, sort_columns=False, parse_header=False, unfold_last_axis_name=False, |
144 | 148 | fill_value=nan, meta=None, cartesian_prod=True, **kwargs): |
145 | 149 | r""" |
@@ -357,15 +361,20 @@ def _extract_labels_from_series(series): |
357 | 361 |
|
358 | 362 |
|
359 | 363 | def _axis_to_series(key, axis, dtype=None): |
360 | | - name = '{}:{}'.format(key, axis.name) |
361 | | - return pd.Series(data=axis.labels, name=name, dtype=dtype) |
| 364 | + name = '{}:{}'.format(key, str(axis)) |
| 365 | + labels = len(axis) if axis.iswildcard else axis.labels |
| 366 | + return pd.Series(data=labels, name=name, dtype=dtype) |
362 | 367 |
|
363 | 368 |
|
364 | 369 | def _series_to_axis(series): |
365 | 370 | name = str(series.name) |
366 | 371 | labels = _extract_labels_from_series(series) |
367 | 372 | if ':' in name: |
368 | 373 | key, axis_name = name.split(':') |
| 374 | + if axis_name[-1] == '*': |
| 375 | + labels = labels[0] |
| 376 | + if _anonymous_axis_pattern.match(axis_name): |
| 377 | + axis_name = None |
369 | 378 | else: |
370 | 379 | # for backward compatibility |
371 | 380 | key = axis_name = name |
|
0 commit comments