Skip to content

API: Public data for Series and Index: .array and .to_numpy() #23623

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 28 commits into from
Nov 29, 2018
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
7959eb6
API: Public data attributes for EA-backed containers
TomAugspurger Oct 30, 2018
5b15894
update
TomAugspurger Nov 6, 2018
4781a36
Merge remote-tracking branch 'upstream/master' into public-data
TomAugspurger Nov 11, 2018
15cc0b7
more notes
TomAugspurger Nov 11, 2018
888853f
update
TomAugspurger Nov 11, 2018
2cfca30
Merge remote-tracking branch 'upstream/master' into public-data
TomAugspurger Nov 11, 2018
3e76f02
Merge remote-tracking branch 'upstream/master' into public-data
TomAugspurger Nov 13, 2018
7e43cf0
Squashed commit of the following:
TomAugspurger Nov 13, 2018
bceb612
DOC: updated docs
TomAugspurger Nov 13, 2018
c19c9bb
Added DataFrame.to_numpy
TomAugspurger Nov 17, 2018
fe813ff
Merge remote-tracking branch 'upstream/master' into public-data
TomAugspurger Nov 17, 2018
8619790
clean
TomAugspurger Nov 17, 2018
639b6fb
Merge remote-tracking branch 'upstream/master' into public-data
TomAugspurger Nov 21, 2018
95f19bc
doc update
TomAugspurger Nov 21, 2018
3292e43
Merge remote-tracking branch 'upstream/master' into public-data
TomAugspurger Nov 21, 2018
5a905ab
update
TomAugspurger Nov 21, 2018
1e6eed4
fixed doctest
TomAugspurger Nov 21, 2018
4545d93
Merge remote-tracking branch 'upstream/master' into public-data
TomAugspurger Nov 26, 2018
2d7abb4
Merge remote-tracking branch 'upstream/master' into public-data
TomAugspurger Nov 27, 2018
a7a13a0
Fixed array error in docs
TomAugspurger Nov 27, 2018
c0a63c0
update docs
TomAugspurger Nov 27, 2018
661b9eb
Fixup for feedback
TomAugspurger Nov 28, 2018
52f5407
Merge remote-tracking branch 'upstream/master' into public-data
TomAugspurger Nov 28, 2018
566a027
skip only on index box
TomAugspurger Nov 28, 2018
062c49f
Series.values
TomAugspurger Nov 28, 2018
78e5824
Merge remote-tracking branch 'upstream/master' into public-data
TomAugspurger Nov 28, 2018
e805c26
remove stale todo
TomAugspurger Nov 28, 2018
f9eee65
Merge remote-tracking branch 'upstream/master' into public-data
TomAugspurger Nov 29, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Squashed commit of the following:
commit e4b21f6
Author: Tom Augspurger <[email protected]>
Date:   Mon Nov 12 16:09:58 2018 -0600

    TST: Change rops tests

commit e903550
Author: Tom Augspurger <[email protected]>
Date:   Mon Nov 12 09:31:38 2018 -0600

    Add note

    [ci skip]

    ***NO CI***

commit fa8934a
Author: Tom Augspurger <[email protected]>
Date:   Mon Nov 12 06:16:53 2018 -0600

    update errors

commit 505970e
Merge: a30bc02 3592a46
Author: Tom Augspurger <[email protected]>
Date:   Mon Nov 12 05:55:31 2018 -0600

    Merge remote-tracking branch 'upstream/master' into index-ndarray-data

commit a30bc02
Author: Tom Augspurger <[email protected]>
Date:   Sun Nov 11 15:14:46 2018 -0600

    remove assert

commit 1f23ebc
Author: Tom Augspurger <[email protected]>
Date:   Sun Nov 11 15:01:13 2018 -0600

    BUG: Ensure that Index._data is an ndarray

    BUG: Ensure that Index._data is an ndarray

    Split from #23623, where it was
    causing issues with infer_dtype.
  • Loading branch information
TomAugspurger committed Nov 13, 2018
commit 7e43cf00f9d1617777f3479df940bdadb67eff53
6 changes: 6 additions & 0 deletions pandas/core/indexes/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -522,6 +522,12 @@ def _simple_new(cls, values, name=None, dtype=None, **kwargs):
values = cls(values, name=name, dtype=dtype,
**kwargs)._ndarray_values

if isinstance(values, (ABCSeries, cls)):
# Index._data must always be an ndarray.
# This is no-copy for when _values is an ndarray,
# which should be always at this point.
values = np.asarray(values._values)

result = object.__new__(cls)
result._data = values
result.name = name
Expand Down
6 changes: 6 additions & 0 deletions pandas/tests/indexes/test_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -504,6 +504,12 @@ def test_constructor_cast(self):
with pytest.raises(ValueError, match=msg):
Index(["a", "b", "c"], dtype=float)

def test_constructor_unwraps_index(self):
a = pd.Index([True, False])
b = pd.Index(a)
expected = np.array([True, False], dtype=object)
tm.assert_numpy_array_equal(b._data, expected)

def test_view_with_args(self):

restricted = ['unicodeIndex', 'strIndex', 'catIndex', 'boolIndex',
Expand Down
6 changes: 6 additions & 0 deletions pandas/tests/indexes/test_numeric.py
Original file line number Diff line number Diff line change
Expand Up @@ -628,6 +628,12 @@ def test_constructor_coercion_signed_to_unsigned(self, uint_dtype):
with pytest.raises(OverflowError, match=msg):
Index([-1], dtype=uint_dtype)

def test_constructor_unwraps_index(self):
idx = pd.Index([1, 2])
result = pd.Int64Index(idx)
expected = np.array([1, 2], dtype='int64')
tm.assert_numpy_array_equal(result._data, expected)

def test_coerce_list(self):
# coerce things
arr = Index([1, 2, 3, 4])
Expand Down
28 changes: 14 additions & 14 deletions pandas/tests/series/test_operators.py
Original file line number Diff line number Diff line change
Expand Up @@ -189,20 +189,7 @@ def test_scalar_na_logical_ops_corners(self):
operator.and_,
operator.or_,
operator.xor,
pytest.param(ops.rand_,
marks=pytest.mark.xfail(reason="GH#22092 Index "
"implementation returns "
"Index",
raises=AssertionError,
strict=True)),
pytest.param(ops.ror_,
marks=pytest.mark.xfail(reason="GH#22092 Index "
"implementation raises",
raises=ValueError, strict=True)),
pytest.param(ops.rxor,
marks=pytest.mark.xfail(reason="GH#22092 Index "
"implementation raises",
raises=TypeError, strict=True))

])
def test_logical_ops_with_index(self, op):
# GH#22092, GH#19792
Expand All @@ -221,6 +208,19 @@ def test_logical_ops_with_index(self, op):
result = op(ser, idx2)
assert_series_equal(result, expected)

@pytest.mark.parametrize("op, expected", [
(ops.rand_, pd.Index([False, True])),
(ops.ror_, pd.Index([False, True])),
(ops.rxor, pd.Index([])),
])
def test_reverse_ops_with_index(self, op, expected):
# https://github.com/pandas-dev/pandas/pull/23628
# multi-set Index ops are buggy, so let's avoid duplicates...
ser = Series([True, False])
idx = Index([False, True])
result = op(ser, idx)
tm.assert_index_equal(result, expected)

def test_logical_ops_label_based(self):
# GH#4947
# logical ops should be label based
Expand Down