Skip to content

Commit 013b983

Browse files
toobazjowens
authored andcommitted
REF: _get_objs_combined_axis (pandas-dev#17217)
1 parent a2d8d23 commit 013b983

File tree

5 files changed

+26
-26
lines changed

5 files changed

+26
-26
lines changed

pandas/core/frame.py

+2-4
Original file line numberDiff line numberDiff line change
@@ -6126,12 +6126,10 @@ def _list_to_arrays(data, columns, coerce_float=False, dtype=None):
61266126

61276127

61286128
def _list_of_series_to_arrays(data, columns, coerce_float=False, dtype=None):
6129-
from pandas.core.index import _get_combined_index
6129+
from pandas.core.index import _get_objs_combined_axis
61306130

61316131
if columns is None:
6132-
columns = _get_combined_index([
6133-
s.index for s in data if getattr(s, 'index', None) is not None
6134-
])
6132+
columns = _get_objs_combined_axis(data)
61356133

61366134
indexer_cache = {}
61376135

pandas/core/indexes/api.py

+11
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,22 @@
2323
'PeriodIndex', 'DatetimeIndex',
2424
'_new_Index', 'NaT',
2525
'_ensure_index', '_get_na_value', '_get_combined_index',
26+
'_get_objs_combined_axis',
2627
'_get_distinct_indexes', '_union_indexes',
2728
'_get_consensus_names',
2829
'_all_indexes_same']
2930

3031

32+
def _get_objs_combined_axis(objs, intersect=False, axis=0):
33+
# Extract combined index: return intersection or union (depending on the
34+
# value of "intersect") of indexes on given axis, or None if all objects
35+
# lack indexes (e.g. they are numpy arrays)
36+
obs_idxes = [obj._get_axis(axis) for obj in objs
37+
if hasattr(obj, '_get_axis')]
38+
if obs_idxes:
39+
return _get_combined_index(obs_idxes, intersect=intersect)
40+
41+
3142
def _get_combined_index(indexes, intersect=False):
3243
# TODO: handle index names!
3344
indexes = _get_distinct_indexes(indexes)

pandas/core/panel.py

+3-4
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
from pandas.core.frame import DataFrame
2727
from pandas.core.generic import NDFrame, _shared_docs
2828
from pandas.core.index import (Index, MultiIndex, _ensure_index,
29-
_get_combined_index)
29+
_get_objs_combined_axis)
3030
from pandas.io.formats.printing import pprint_thing
3131
from pandas.core.indexing import maybe_droplevels
3232
from pandas.core.internals import (BlockManager,
@@ -1448,21 +1448,20 @@ def _extract_axis(self, data, axis=0, intersect=False):
14481448
index = Index([])
14491449
elif len(data) > 0:
14501450
raw_lengths = []
1451-
indexes = []
14521451

14531452
have_raw_arrays = False
14541453
have_frames = False
14551454

14561455
for v in data.values():
14571456
if isinstance(v, self._constructor_sliced):
14581457
have_frames = True
1459-
indexes.append(v._get_axis(axis))
14601458
elif v is not None:
14611459
have_raw_arrays = True
14621460
raw_lengths.append(v.shape[axis])
14631461

14641462
if have_frames:
1465-
index = _get_combined_index(indexes, intersect=intersect)
1463+
index = _get_objs_combined_axis(data.values(), axis=axis,
1464+
intersect=intersect)
14661465

14671466
if have_raw_arrays:
14681467
lengths = list(set(raw_lengths))

pandas/core/reshape/concat.py

+8-11
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
import numpy as np
66
from pandas import compat, DataFrame, Series, Index, MultiIndex
7-
from pandas.core.index import (_get_combined_index,
7+
from pandas.core.index import (_get_objs_combined_axis,
88
_ensure_index, _get_consensus_names,
99
_all_indexes_same)
1010
from pandas.core.categorical import (_factorize_from_iterable,
@@ -445,16 +445,13 @@ def _get_new_axes(self):
445445
return new_axes
446446

447447
def _get_comb_axis(self, i):
448-
if self._is_series:
449-
all_indexes = [x.index for x in self.objs]
450-
else:
451-
try:
452-
all_indexes = [x._data.axes[i] for x in self.objs]
453-
except IndexError:
454-
types = [type(x).__name__ for x in self.objs]
455-
raise TypeError("Cannot concatenate list of %s" % types)
456-
457-
return _get_combined_index(all_indexes, intersect=self.intersect)
448+
data_axis = self.objs[0]._get_block_manager_axis(i)
449+
try:
450+
return _get_objs_combined_axis(self.objs, axis=data_axis,
451+
intersect=self.intersect)
452+
except IndexError:
453+
types = [type(x).__name__ for x in self.objs]
454+
raise TypeError("Cannot concatenate list of %s" % types)
458455

459456
def _get_concat_axis(self):
460457
"""

pandas/core/reshape/pivot.py

+2-7
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from pandas.core.series import Series
99
from pandas.core.groupby import Grouper
1010
from pandas.core.reshape.util import cartesian_product
11-
from pandas.core.index import Index, _get_combined_index
11+
from pandas.core.index import Index, _get_objs_combined_axis
1212
from pandas.compat import range, lrange, zip
1313
from pandas import compat
1414
import pandas.core.common as com
@@ -440,12 +440,7 @@ def crosstab(index, columns, values=None, rownames=None, colnames=None,
440440
rownames = _get_names(index, rownames, prefix='row')
441441
colnames = _get_names(columns, colnames, prefix='col')
442442

443-
obs_idxes = [obj.index for objs in (index, columns) for obj in objs
444-
if hasattr(obj, 'index')]
445-
if obs_idxes:
446-
common_idx = _get_combined_index(obs_idxes, intersect=True)
447-
else:
448-
common_idx = None
443+
common_idx = _get_objs_combined_axis(index + columns, intersect=True)
449444

450445
data = {}
451446
data.update(zip(rownames, index))

0 commit comments

Comments
 (0)