|
6 | 6 | import pytest
|
7 | 7 |
|
8 | 8 | import pandas as pd
|
9 |
| -from pandas import DataFrame, Series, Timestamp, date_range |
| 9 | +from pandas import DataFrame, Period, Series, Timestamp, date_range, period_range |
10 | 10 | import pandas._testing as tm
|
11 | 11 | from pandas.api.types import is_scalar
|
12 | 12 | from pandas.tests.indexing.common import Base
|
@@ -956,6 +956,83 @@ def test_loc_reverse_assignment(self):
|
956 | 956 |
|
957 | 957 | tm.assert_series_equal(result, expected)
|
958 | 958 |
|
| 959 | + @pytest.mark.parametrize( |
| 960 | + "idx,labels,expected_idx", |
| 961 | + [ |
| 962 | + ( |
| 963 | + period_range(start="2000", periods=20, freq="D"), |
| 964 | + ["2000-01-04", "2000-01-08", "2000-01-12"], |
| 965 | + [ |
| 966 | + Period("2000-01-04", freq="D"), |
| 967 | + Period("2000-01-08", freq="D"), |
| 968 | + Period("2000-01-12", freq="D"), |
| 969 | + ], |
| 970 | + ), |
| 971 | + ( |
| 972 | + date_range(start="2000", periods=20, freq="D"), |
| 973 | + ["2000-01-04", "2000-01-08", "2000-01-12"], |
| 974 | + [ |
| 975 | + Timestamp("2000-01-04", freq="D"), |
| 976 | + Timestamp("2000-01-08", freq="D"), |
| 977 | + Timestamp("2000-01-12", freq="D"), |
| 978 | + ], |
| 979 | + ), |
| 980 | + ( |
| 981 | + pd.timedelta_range(start="1 day", periods=20), |
| 982 | + ["4D", "8D", "12D"], |
| 983 | + [pd.Timedelta("4 day"), pd.Timedelta("8 day"), pd.Timedelta("12 day")], |
| 984 | + ), |
| 985 | + ], |
| 986 | + ) |
| 987 | + def test_loc_with_list_of_strings_representing_datetimes( |
| 988 | + self, idx, labels, expected_idx |
| 989 | + ): |
| 990 | + # GH 11278 |
| 991 | + s = Series(range(20), index=idx) |
| 992 | + df = DataFrame(range(20), index=idx) |
| 993 | + |
| 994 | + expected_value = [3, 7, 11] |
| 995 | + expected_s = Series(expected_value, expected_idx) |
| 996 | + expected_df = DataFrame(expected_value, expected_idx) |
| 997 | + |
| 998 | + tm.assert_series_equal(expected_s, s.loc[labels]) |
| 999 | + tm.assert_series_equal(expected_s, s[labels]) |
| 1000 | + tm.assert_frame_equal(expected_df, df.loc[labels]) |
| 1001 | + |
| 1002 | + @pytest.mark.parametrize( |
| 1003 | + "idx,labels,msg", |
| 1004 | + [ |
| 1005 | + ( |
| 1006 | + period_range(start="2000", periods=20, freq="D"), |
| 1007 | + ["2000-01-04", "2000-01-30"], |
| 1008 | + r"with any missing labels", |
| 1009 | + ), |
| 1010 | + ( |
| 1011 | + date_range(start="2000", periods=20, freq="D"), |
| 1012 | + ["2000-01-04", "2000-01-30"], |
| 1013 | + r"with any missing labels", |
| 1014 | + ), |
| 1015 | + ( |
| 1016 | + pd.timedelta_range(start="1 day", periods=20), |
| 1017 | + ["3 day", "30 day"], |
| 1018 | + r"with any missing labels", |
| 1019 | + ), |
| 1020 | + ], |
| 1021 | + ) |
| 1022 | + def test_loc_with_list_of_strings_representing_datetimes_missing_value( |
| 1023 | + self, idx, labels, msg |
| 1024 | + ): |
| 1025 | + # GH 11278 |
| 1026 | + s = Series(range(20), index=idx) |
| 1027 | + df = DataFrame(range(20), index=idx) |
| 1028 | + |
| 1029 | + with pytest.raises(KeyError, match=msg): |
| 1030 | + s.loc[labels] |
| 1031 | + with pytest.raises(KeyError, match=msg): |
| 1032 | + s[labels] |
| 1033 | + with pytest.raises(KeyError, match=msg): |
| 1034 | + df.loc[labels] |
| 1035 | + |
959 | 1036 |
|
960 | 1037 | def test_series_loc_getitem_label_list_missing_values():
|
961 | 1038 | # gh-11428
|
|
0 commit comments