diff --git a/pandas/core/common.py b/pandas/core/common.py index 30f6b66a2b7d3..b5529eea11b0a 100644 --- a/pandas/core/common.py +++ b/pandas/core/common.py @@ -604,6 +604,15 @@ def ensure_float(arr): return arr +def assert_ndarray_endianess(ar): + import sys + little_endian = (sys.byteorder == 'little') + if not isinstance(ar,np.ndarray): + return + + if ((ar.dtype.byteorder == '>' and little_endian) or + (ar.dtype.byteorder == '<' and not little_endian)): + raise ValueError(u"Non-native byte order not supported") def _mut_exclusive(arg1, arg2): if arg1 is not None and arg2 is not None: diff --git a/pandas/core/frame.py b/pandas/core/frame.py index f7f296e822e15..0379c5f65d737 100644 --- a/pandas/core/frame.py +++ b/pandas/core/frame.py @@ -370,6 +370,9 @@ def __init__(self, data=None, index=None, columns=None, dtype=None, if data is None: data = {} + for x in (data, index, columns): + com.assert_ndarray_endianess(x) + if isinstance(data, DataFrame): data = data._data diff --git a/pandas/core/index.py b/pandas/core/index.py index b7792309f66ff..8ba65fdd2f978 100644 --- a/pandas/core/index.py +++ b/pandas/core/index.py @@ -81,6 +81,9 @@ class Index(np.ndarray): def __new__(cls, data, dtype=None, copy=False, name=None): if isinstance(data, np.ndarray): + + com.assert_ndarray_endianess(data) + if issubclass(data.dtype.type, np.datetime64): from pandas.tseries.index import DatetimeIndex result = DatetimeIndex(data, copy=copy, name=name) diff --git a/pandas/core/panel.py b/pandas/core/panel.py index 2dca8a2aef801..df4146e8b0a54 100644 --- a/pandas/core/panel.py +++ b/pandas/core/panel.py @@ -212,6 +212,9 @@ def __init__(self, data=None, items=None, major_axis=None, minor_axis=None, if data is None: data = {} + for x in (data, items, major_axis,minor_axis): + com.assert_ndarray_endianess(x) + passed_axes = [items, major_axis, minor_axis] axes = None if isinstance(data, BlockManager): diff --git a/pandas/core/series.py b/pandas/core/series.py index 3241044a63c68..5d90ec862ae8d 100644 --- a/pandas/core/series.py +++ b/pandas/core/series.py @@ -409,7 +409,9 @@ def __init__(self, data=None, index=None, dtype=None, name=None, input data copy : boolean, default False """ - pass + + for x in (data, index): + com.assert_ndarray_endianess(x) @property def _constructor(self): diff --git a/pandas/sparse/frame.py b/pandas/sparse/frame.py index c38936b55696f..0cd966ddc6884 100644 --- a/pandas/sparse/frame.py +++ b/pandas/sparse/frame.py @@ -75,6 +75,9 @@ def __init__(self, data=None, index=None, columns=None, self.default_kind = default_kind self.default_fill_value = default_fill_value + for x in (data, index, columns): + com.assert_ndarray_endianess(x) + if isinstance(data, dict): sdict, columns, index = self._init_dict(data, index, columns) elif isinstance(data, (np.ndarray, list)): diff --git a/pandas/sparse/panel.py b/pandas/sparse/panel.py index bd5a2785aba2b..23a79c474a181 100644 --- a/pandas/sparse/panel.py +++ b/pandas/sparse/panel.py @@ -76,6 +76,9 @@ def __init__(self, frames, items=None, major_axis=None, minor_axis=None, self.default_fill_value = fill_value = default_fill_value self.default_kind = kind = default_kind + for x in (items, major_axis,minor_axis): + com.assert_ndarray_endianess(x) + # pre-filter, if necessary if items is None: items = Index(sorted(frames.keys())) diff --git a/pandas/sparse/series.py b/pandas/sparse/series.py index 8be9e2b5c7d75..39dc201583fff 100644 --- a/pandas/sparse/series.py +++ b/pandas/sparse/series.py @@ -14,7 +14,7 @@ from pandas.core.index import Index, _ensure_index from pandas.core.series import Series, TimeSeries, _maybe_match_name from pandas.core.frame import DataFrame -import pandas.core.common as common +import pandas.core.common as com import pandas.core.datetools as datetools from pandas.util import py3compat @@ -82,6 +82,9 @@ class SparseSeries(SparseArray, Series): def __new__(cls, data, index=None, sparse_index=None, kind='block', fill_value=None, name=None, copy=False): + for x in (data, index): + com.assert_ndarray_endianess(x) + is_sparse_array = isinstance(data, SparseArray) if fill_value is None: if is_sparse_array: @@ -412,7 +415,7 @@ def reindex(self, index=None, method=None, copy=True, limit=None): new_index, fill_vec = self.index.reindex(index, method=method, limit=limit) - new_values = common.take_1d(self.values, fill_vec) + new_values = com.take_1d(self.values, fill_vec) return SparseSeries(new_values, index=new_index, fill_value=self.fill_value, name=self.name) diff --git a/pandas/tests/test_common.py b/pandas/tests/test_common.py index 44c40b6930784..0f04419837d80 100644 --- a/pandas/tests/test_common.py +++ b/pandas/tests/test_common.py @@ -14,6 +14,20 @@ from pandas.util import py3compat +def test_assert_endianess(): + little_endian = (sys.byteorder == 'little') + if little_endian: + arr = np.array([1], dtype='>i8') + else: + arr = np.array([1], dtype='