|
8 | 8 | import pytest
|
9 | 9 |
|
10 | 10 | import pandas as pd
|
11 |
| -from pandas import DataFrame, Index, Series, date_range |
| 11 | +from pandas import DataFrame, Index, Period, Series, Timestamp, date_range, period_range |
12 | 12 | import pandas._testing as tm
|
13 | 13 |
|
14 | 14 |
|
@@ -525,3 +525,118 @@ def test_partial_set_empty_frame_empty_consistencies(self):
|
525 | 525 | df.loc[0, "x"] = 1
|
526 | 526 | expected = DataFrame(dict(x=[1], y=[np.nan]))
|
527 | 527 | tm.assert_frame_equal(df, expected, check_dtype=False)
|
| 528 | + |
| 529 | + @pytest.mark.parametrize( |
| 530 | + "idx,labels,expected_idx", |
| 531 | + [ |
| 532 | + ( |
| 533 | + period_range(start="2000", periods=20, freq="D"), |
| 534 | + ["2000-01-04", "2000-01-08", "2000-01-12"], |
| 535 | + [ |
| 536 | + Period("2000-01-04", freq="D"), |
| 537 | + Period("2000-01-08", freq="D"), |
| 538 | + Period("2000-01-12", freq="D"), |
| 539 | + ], |
| 540 | + ), |
| 541 | + ( |
| 542 | + date_range(start="2000", periods=20, freq="D"), |
| 543 | + ["2000-01-04", "2000-01-08", "2000-01-12"], |
| 544 | + [ |
| 545 | + Timestamp("2000-01-04", freq="D"), |
| 546 | + Timestamp("2000-01-08", freq="D"), |
| 547 | + Timestamp("2000-01-12", freq="D"), |
| 548 | + ], |
| 549 | + ), |
| 550 | + ( |
| 551 | + pd.timedelta_range(start="1 day", periods=20), |
| 552 | + ["4D", "8D", "12D"], |
| 553 | + [pd.Timedelta("4 day"), pd.Timedelta("8 day"), pd.Timedelta("12 day")], |
| 554 | + ), |
| 555 | + ], |
| 556 | + ) |
| 557 | + def test_loc_with_list_of_strings_representing_datetimes( |
| 558 | + self, idx, labels, expected_idx |
| 559 | + ): |
| 560 | + # GH 11278 |
| 561 | + s = Series(range(20), index=idx) |
| 562 | + df = DataFrame(range(20), index=idx) |
| 563 | + |
| 564 | + expected_value = [3, 7, 11] |
| 565 | + expected_s = Series(expected_value, expected_idx) |
| 566 | + expected_df = DataFrame(expected_value, expected_idx) |
| 567 | + |
| 568 | + tm.assert_series_equal(expected_s, s.loc[labels]) |
| 569 | + tm.assert_series_equal(expected_s, s[labels]) |
| 570 | + tm.assert_frame_equal(expected_df, df.loc[labels]) |
| 571 | + |
| 572 | + @pytest.mark.parametrize( |
| 573 | + "idx,labels", |
| 574 | + [ |
| 575 | + ( |
| 576 | + period_range(start="2000", periods=20, freq="D"), |
| 577 | + ["2000-01-04", "2000-01-30"], |
| 578 | + ), |
| 579 | + ( |
| 580 | + date_range(start="2000", periods=20, freq="D"), |
| 581 | + ["2000-01-04", "2000-01-30"], |
| 582 | + ), |
| 583 | + (pd.timedelta_range(start="1 day", periods=20), ["3 day", "30 day"]), |
| 584 | + ], |
| 585 | + ) |
| 586 | + def test_loc_with_list_of_strings_representing_datetimes_missing_value( |
| 587 | + self, idx, labels |
| 588 | + ): |
| 589 | + # GH 11278 |
| 590 | + s = Series(range(20), index=idx) |
| 591 | + df = DataFrame(range(20), index=idx) |
| 592 | + msg = r"with any missing labels" |
| 593 | + |
| 594 | + with pytest.raises(KeyError, match=msg): |
| 595 | + s.loc[labels] |
| 596 | + with pytest.raises(KeyError, match=msg): |
| 597 | + s[labels] |
| 598 | + with pytest.raises(KeyError, match=msg): |
| 599 | + df.loc[labels] |
| 600 | + |
| 601 | + @pytest.mark.parametrize( |
| 602 | + "idx,labels,msg", |
| 603 | + [ |
| 604 | + ( |
| 605 | + period_range(start="2000", periods=20, freq="D"), |
| 606 | + ["4D", "8D"], |
| 607 | + ( |
| 608 | + r"None of \[Index\(\['4D', '8D'\], dtype='object'\)\]" |
| 609 | + r" are in the \[index\]" |
| 610 | + ), |
| 611 | + ), |
| 612 | + ( |
| 613 | + date_range(start="2000", periods=20, freq="D"), |
| 614 | + ["4D", "8D"], |
| 615 | + ( |
| 616 | + r"None of \[Index\(\['4D', '8D'\], dtype='object'\)\]" |
| 617 | + r" are in the \[index\]" |
| 618 | + ), |
| 619 | + ), |
| 620 | + ( |
| 621 | + pd.timedelta_range(start="1 day", periods=20), |
| 622 | + ["2000-01-04", "2000-01-08"], |
| 623 | + ( |
| 624 | + r"None of \[Index\(\['2000-01-04', '2000-01-08'\]," |
| 625 | + r" dtype='object'\)\] are in the \[index\]" |
| 626 | + ), |
| 627 | + ), |
| 628 | + ], |
| 629 | + ) |
| 630 | + def test_loc_with_list_of_strings_representing_datetimes_not_matched_type( |
| 631 | + self, idx, labels, msg |
| 632 | + ): |
| 633 | + # GH 11278 |
| 634 | + s = Series(range(20), index=idx) |
| 635 | + df = DataFrame(range(20), index=idx) |
| 636 | + |
| 637 | + with pytest.raises(KeyError, match=msg): |
| 638 | + s.loc[labels] |
| 639 | + with pytest.raises(KeyError, match=msg): |
| 640 | + s[labels] |
| 641 | + with pytest.raises(KeyError, match=msg): |
| 642 | + df.loc[labels] |
0 commit comments