You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
239 lines
5.6 KiB
239 lines
5.6 KiB
6 months ago
|
import numpy as np
|
||
|
import pytest
|
||
|
|
||
|
import pandas as pd
|
||
|
from pandas import (
|
||
|
DatetimeIndex,
|
||
|
Index,
|
||
|
Series,
|
||
|
date_range,
|
||
|
)
|
||
|
import pandas._testing as tm
|
||
|
|
||
|
|
||
|
def test_get():
|
||
|
# GH 6383
|
||
|
s = Series(
|
||
|
np.array(
|
||
|
[
|
||
|
43,
|
||
|
48,
|
||
|
60,
|
||
|
48,
|
||
|
50,
|
||
|
51,
|
||
|
50,
|
||
|
45,
|
||
|
57,
|
||
|
48,
|
||
|
56,
|
||
|
45,
|
||
|
51,
|
||
|
39,
|
||
|
55,
|
||
|
43,
|
||
|
54,
|
||
|
52,
|
||
|
51,
|
||
|
54,
|
||
|
]
|
||
|
)
|
||
|
)
|
||
|
|
||
|
result = s.get(25, 0)
|
||
|
expected = 0
|
||
|
assert result == expected
|
||
|
|
||
|
s = Series(
|
||
|
np.array(
|
||
|
[
|
||
|
43,
|
||
|
48,
|
||
|
60,
|
||
|
48,
|
||
|
50,
|
||
|
51,
|
||
|
50,
|
||
|
45,
|
||
|
57,
|
||
|
48,
|
||
|
56,
|
||
|
45,
|
||
|
51,
|
||
|
39,
|
||
|
55,
|
||
|
43,
|
||
|
54,
|
||
|
52,
|
||
|
51,
|
||
|
54,
|
||
|
]
|
||
|
),
|
||
|
index=Index(
|
||
|
[
|
||
|
25.0,
|
||
|
36.0,
|
||
|
49.0,
|
||
|
64.0,
|
||
|
81.0,
|
||
|
100.0,
|
||
|
121.0,
|
||
|
144.0,
|
||
|
169.0,
|
||
|
196.0,
|
||
|
1225.0,
|
||
|
1296.0,
|
||
|
1369.0,
|
||
|
1444.0,
|
||
|
1521.0,
|
||
|
1600.0,
|
||
|
1681.0,
|
||
|
1764.0,
|
||
|
1849.0,
|
||
|
1936.0,
|
||
|
],
|
||
|
dtype=np.float64,
|
||
|
),
|
||
|
)
|
||
|
|
||
|
result = s.get(25, 0)
|
||
|
expected = 43
|
||
|
assert result == expected
|
||
|
|
||
|
# GH 7407
|
||
|
# with a boolean accessor
|
||
|
df = pd.DataFrame({"i": [0] * 3, "b": [False] * 3})
|
||
|
vc = df.i.value_counts()
|
||
|
result = vc.get(99, default="Missing")
|
||
|
assert result == "Missing"
|
||
|
|
||
|
vc = df.b.value_counts()
|
||
|
result = vc.get(False, default="Missing")
|
||
|
assert result == 3
|
||
|
|
||
|
result = vc.get(True, default="Missing")
|
||
|
assert result == "Missing"
|
||
|
|
||
|
|
||
|
def test_get_nan(float_numpy_dtype):
|
||
|
# GH 8569
|
||
|
s = Index(range(10), dtype=float_numpy_dtype).to_series()
|
||
|
assert s.get(np.nan) is None
|
||
|
assert s.get(np.nan, default="Missing") == "Missing"
|
||
|
|
||
|
|
||
|
def test_get_nan_multiple(float_numpy_dtype):
|
||
|
# GH 8569
|
||
|
# ensure that fixing "test_get_nan" above hasn't broken get
|
||
|
# with multiple elements
|
||
|
s = Index(range(10), dtype=float_numpy_dtype).to_series()
|
||
|
|
||
|
idx = [2, 30]
|
||
|
assert s.get(idx) is None
|
||
|
|
||
|
idx = [2, np.nan]
|
||
|
assert s.get(idx) is None
|
||
|
|
||
|
# GH 17295 - all missing keys
|
||
|
idx = [20, 30]
|
||
|
assert s.get(idx) is None
|
||
|
|
||
|
idx = [np.nan, np.nan]
|
||
|
assert s.get(idx) is None
|
||
|
|
||
|
|
||
|
def test_get_with_default():
|
||
|
# GH#7725
|
||
|
d0 = ["a", "b", "c", "d"]
|
||
|
d1 = np.arange(4, dtype="int64")
|
||
|
|
||
|
for data, index in ((d0, d1), (d1, d0)):
|
||
|
s = Series(data, index=index)
|
||
|
for i, d in zip(index, data):
|
||
|
assert s.get(i) == d
|
||
|
assert s.get(i, d) == d
|
||
|
assert s.get(i, "z") == d
|
||
|
|
||
|
assert s.get("e", "z") == "z"
|
||
|
assert s.get("e", "e") == "e"
|
||
|
|
||
|
msg = "Series.__getitem__ treating keys as positions is deprecated"
|
||
|
warn = None
|
||
|
if index is d0:
|
||
|
warn = FutureWarning
|
||
|
with tm.assert_produces_warning(warn, match=msg):
|
||
|
assert s.get(10, "z") == "z"
|
||
|
assert s.get(10, 10) == 10
|
||
|
|
||
|
|
||
|
@pytest.mark.parametrize(
|
||
|
"arr",
|
||
|
[
|
||
|
np.random.default_rng(2).standard_normal(10),
|
||
|
DatetimeIndex(date_range("2020-01-01", periods=10), name="a").tz_localize(
|
||
|
tz="US/Eastern"
|
||
|
),
|
||
|
],
|
||
|
)
|
||
|
def test_get_with_ea(arr):
|
||
|
# GH#21260
|
||
|
ser = Series(arr, index=[2 * i for i in range(len(arr))])
|
||
|
assert ser.get(4) == ser.iloc[2]
|
||
|
|
||
|
result = ser.get([4, 6])
|
||
|
expected = ser.iloc[[2, 3]]
|
||
|
tm.assert_series_equal(result, expected)
|
||
|
|
||
|
result = ser.get(slice(2))
|
||
|
expected = ser.iloc[[0, 1]]
|
||
|
tm.assert_series_equal(result, expected)
|
||
|
|
||
|
assert ser.get(-1) is None
|
||
|
assert ser.get(ser.index.max() + 1) is None
|
||
|
|
||
|
ser = Series(arr[:6], index=list("abcdef"))
|
||
|
assert ser.get("c") == ser.iloc[2]
|
||
|
|
||
|
result = ser.get(slice("b", "d"))
|
||
|
expected = ser.iloc[[1, 2, 3]]
|
||
|
tm.assert_series_equal(result, expected)
|
||
|
|
||
|
result = ser.get("Z")
|
||
|
assert result is None
|
||
|
|
||
|
msg = "Series.__getitem__ treating keys as positions is deprecated"
|
||
|
with tm.assert_produces_warning(FutureWarning, match=msg):
|
||
|
assert ser.get(4) == ser.iloc[4]
|
||
|
with tm.assert_produces_warning(FutureWarning, match=msg):
|
||
|
assert ser.get(-1) == ser.iloc[-1]
|
||
|
with tm.assert_produces_warning(FutureWarning, match=msg):
|
||
|
assert ser.get(len(ser)) is None
|
||
|
|
||
|
# GH#21257
|
||
|
ser = Series(arr)
|
||
|
ser2 = ser[::2]
|
||
|
assert ser2.get(1) is None
|
||
|
|
||
|
|
||
|
def test_getitem_get(string_series, object_series):
|
||
|
msg = "Series.__getitem__ treating keys as positions is deprecated"
|
||
|
|
||
|
for obj in [string_series, object_series]:
|
||
|
idx = obj.index[5]
|
||
|
|
||
|
assert obj[idx] == obj.get(idx)
|
||
|
assert obj[idx] == obj.iloc[5]
|
||
|
|
||
|
with tm.assert_produces_warning(FutureWarning, match=msg):
|
||
|
assert string_series.get(-1) == string_series.get(string_series.index[-1])
|
||
|
assert string_series.iloc[5] == string_series.get(string_series.index[5])
|
||
|
|
||
|
|
||
|
def test_get_none():
|
||
|
# GH#5652
|
||
|
s1 = Series(dtype=object)
|
||
|
s2 = Series(dtype=object, index=list("abc"))
|
||
|
for s in [s1, s2]:
|
||
|
result = s.get(None)
|
||
|
assert result is None
|