diff --git a/pandas/core/frame.py b/pandas/core/frame.py index 8a3ac4db37d2d..3c9a5868b725e 100644 --- a/pandas/core/frame.py +++ b/pandas/core/frame.py @@ -28,7 +28,7 @@ is_sequence, _infer_dtype_from_scalar, _values_from_object, is_list_like, _maybe_box_datetimelike, is_categorical_dtype, is_object_dtype, is_internal_type, is_datetimetz, _possibly_infer_to_datetimelike, - _dict_compat) + _dict_compat, is_dict_like) from pandas.core.generic import NDFrame, _shared_docs from pandas.core.index import Index, MultiIndex, _ensure_index from pandas.core.indexing import (maybe_droplevels, convert_to_index_sliceable, @@ -219,8 +219,6 @@ def __init__(self, data=None, index=None, columns=None, dtype=None, if isinstance(data, BlockManager): mgr = self._init_mgr(data, axes=dict(index=index, columns=columns), dtype=dtype, copy=copy) - elif isinstance(data, dict): - mgr = self._init_dict(data, index, columns, dtype=dtype) elif isinstance(data, ma.MaskedArray): import numpy.ma.mrecords as mrecords # masked recarray @@ -252,6 +250,8 @@ def __init__(self, data=None, index=None, columns=None, dtype=None, else: mgr = self._init_ndarray(data, index, columns, dtype=dtype, copy=copy) + elif is_dict_like(data): + mgr = self._init_dict(data, index, columns, dtype=dtype) elif isinstance(data, (list, types.GeneratorType)): if isinstance(data, types.GeneratorType): data = list(data) diff --git a/pandas/core/panel.py b/pandas/core/panel.py index e0989574d79e1..7a3f85bf59e87 100644 --- a/pandas/core/panel.py +++ b/pandas/core/panel.py @@ -16,7 +16,8 @@ from pandas.compat import (map, zip, range, u, OrderedDict, OrderedDefaultdict) from pandas.core.categorical import Categorical from pandas.core.common import (PandasError, _try_sort, _default_index, - _infer_dtype_from_scalar, is_list_like) + _infer_dtype_from_scalar, is_list_like, + is_dict_like) from pandas.core.frame import DataFrame from pandas.core.generic import NDFrame, _shared_docs from pandas.core.index import (Index, MultiIndex, _ensure_index, @@ -157,7 +158,7 @@ def _init_data(self, data, copy, dtype, **kwargs): axes = [x if x is not None else y for x, y in zip(passed_axes, data.axes)] mgr = data - elif isinstance(data, dict): + elif is_dict_like(data): mgr = self._init_dict(data, passed_axes, dtype=dtype) copy = False dtype = None diff --git a/pandas/tests/test_generic.py b/pandas/tests/test_generic.py index 7983ac7fff834..52bb14af5bbeb 100644 --- a/pandas/tests/test_generic.py +++ b/pandas/tests/test_generic.py @@ -1034,6 +1034,8 @@ def testit(index, check_index_type=True): self.assertIsInstance(result, DataArray) assert_series_equal(result.to_series(), s) + #assert_series_equal(Series(result), s) + class TestDataFrame(tm.TestCase, Generic): _typ = DataFrame @@ -1832,6 +1834,10 @@ def test_to_xarray(self): expected, check_index_type=False) + assert_frame_equal(DataFrame(result).set_index('foo'), + expected, + check_index_type=False) + # not implemented df.index = pd.MultiIndex.from_product([['a'], range(3)], names=['one', 'two']) @@ -1859,6 +1865,8 @@ def test_to_xarray(self): # idempotency assert_panel_equal(result.to_pandas(), p) + #assert_panel_equal(Panel(result), p) + class TestPanel4D(tm.TestCase, Generic): _typ = Panel4D