|
| 1 | +import pytest |
1 | 2 | import numpy as np
|
2 | 3 |
|
3 | 4 | import pandas as pd
|
| 5 | +import pandas.util.testing as tm |
4 | 6 |
|
5 | 7 | from .base import BaseExtensionTests
|
6 | 8 |
|
@@ -120,3 +122,48 @@ def test_take_sequence(self, data):
|
120 | 122 | assert result.iloc[0] == data[0]
|
121 | 123 | assert result.iloc[1] == data[1]
|
122 | 124 | assert result.iloc[2] == data[3]
|
| 125 | + |
| 126 | + def test_take(self, data, na_value, na_cmp): |
| 127 | + result = data.take([0, -1]) |
| 128 | + assert result.dtype == data.dtype |
| 129 | + assert result[0] == data[0] |
| 130 | + na_cmp(result[1], na_value) |
| 131 | + |
| 132 | + with tm.assert_raises_regex(IndexError, "out of bounds"): |
| 133 | + data.take([len(data) + 1]) |
| 134 | + |
| 135 | + def test_take_empty(self, data, na_value, na_cmp): |
| 136 | + empty = data[:0] |
| 137 | + result = empty.take([-1]) |
| 138 | + na_cmp(result[0], na_value) |
| 139 | + |
| 140 | + with tm.assert_raises_regex(IndexError, "cannot do a non-empty take"): |
| 141 | + empty.take([0, 1]) |
| 142 | + |
| 143 | + @pytest.mark.xfail(reason="Series.take with extension array buggy for -1") |
| 144 | + def test_take_series(self, data): |
| 145 | + s = pd.Series(data) |
| 146 | + result = s.take([0, -1]) |
| 147 | + expected = pd.Series( |
| 148 | + data._constructor_from_sequence([data[0], data[len(data) - 1]]), |
| 149 | + index=[0, len(data) - 1]) |
| 150 | + self.assert_series_equal(result, expected) |
| 151 | + |
| 152 | + def test_reindex(self, data, na_value): |
| 153 | + s = pd.Series(data) |
| 154 | + result = s.reindex([0, 1, 3]) |
| 155 | + expected = pd.Series(data.take([0, 1, 3]), index=[0, 1, 3]) |
| 156 | + self.assert_series_equal(result, expected) |
| 157 | + |
| 158 | + n = len(data) |
| 159 | + result = s.reindex([-1, 0, n]) |
| 160 | + expected = pd.Series( |
| 161 | + data._constructor_from_sequence([na_value, data[0], na_value]), |
| 162 | + index=[-1, 0, n]) |
| 163 | + self.assert_series_equal(result, expected) |
| 164 | + |
| 165 | + result = s.reindex([n, n + 1]) |
| 166 | + expected = pd.Series( |
| 167 | + data._constructor_from_sequence([na_value, na_value]), |
| 168 | + index=[n, n + 1]) |
| 169 | + self.assert_series_equal(result, expected) |
0 commit comments