|
17 | 17 | CategoricalIndex, DatetimeIndex, TimedeltaIndex, PeriodIndex)
|
18 | 18 | from pandas.core.index import InvalidIndexError, NumericIndex
|
19 | 19 | from pandas.util.testing import (assert_almost_equal, assertRaisesRegexp,
|
20 |
| - assert_copy) |
| 20 | + assert_copy, assert_frame_equal) |
21 | 21 | from pandas import compat
|
22 | 22 | from pandas.compat import long
|
23 | 23 |
|
@@ -603,6 +603,157 @@ def test_shift(self):
|
603 | 603 | shifted.name = 'shifted'
|
604 | 604 | self.assertEqual(shifted.name, shifted.shift(1, 'D').name)
|
605 | 605 |
|
| 606 | + def test_union_naming_behavior(self): |
| 607 | + #9965 |
| 608 | + idx_name_a = pd.Index([1,2,3], name='a') |
| 609 | + idx_name_b = pd.Index([4,5,6], name='b') |
| 610 | + idx2_name_a = pd.Index([2,9,8], name='a') |
| 611 | + |
| 612 | + stridx_name_stra = pd.Index(['1','2'], name='stra') |
| 613 | + stridx_name_a = pd.Index(['1','2'], name='a') |
| 614 | + |
| 615 | + idx_name_none = pd.Index(['1','2'], name=None) |
| 616 | + |
| 617 | + dateindex_name_a = pd.DatetimeIndex([datetime.today()], name='a') |
| 618 | + dateindex_name_b = pd.DatetimeIndex([datetime.today()], name='b') |
| 619 | + dateindex_name_None = pd.DatetimeIndex([datetime.today()], name=None) |
| 620 | + |
| 621 | + python_array = [1,2,3] |
| 622 | + numpy_array = np.array([1,2,3]) |
| 623 | + |
| 624 | + #index union index naming behavior |
| 625 | + self.assertEqual(idx_name_a.union(idx_name_b).name, None) |
| 626 | + self.assertEqual(idx_name_a.union(idx2_name_a).name, 'a') |
| 627 | + |
| 628 | + #index union array |
| 629 | + self.assertEqual(idx_name_a.union(python_array).name, 'a') |
| 630 | + self.assertEqual(idx_name_a.union(numpy_array).name, 'a') |
| 631 | + |
| 632 | + #index union index different dtype |
| 633 | + self.assertEqual(idx_name_a.union(stridx_name_a).name, 'a') |
| 634 | + self.assertEqual(idx_name_a.union(stridx_name_stra).name, None) |
| 635 | + |
| 636 | + #index union index with no name |
| 637 | + self.assertEqual(idx_name_a.union(idx_name_none).name, 'a') |
| 638 | + |
| 639 | + #index union dateindex |
| 640 | + self.assertEqual(idx_name_a.union(dateindex_name_a).name, 'a') |
| 641 | + self.assertEqual(idx_name_a.union(dateindex_name_b).name, None) |
| 642 | + self.assertEqual(idx_name_a.union(dateindex_name_None).name, 'a') |
| 643 | + |
| 644 | + #dateindex union |
| 645 | + self.assertEqual(dateindex_name_a.union(python_array).name, 'a') |
| 646 | + self.assertEqual(dateindex_name_a.union(numpy_array).name, 'a') |
| 647 | + |
| 648 | + self.assertEqual(dateindex_name_a.union(idx_name_none).name, 'a') |
| 649 | + self.assertEqual(dateindex_name_a.union(dateindex_name_b).name, None) |
| 650 | + self.assertEqual(dateindex_name_a.union(dateindex_name_None).name, 'a') |
| 651 | + self.assertEqual(dateindex_name_a.union(idx_name_a).name, 'a') |
| 652 | + |
| 653 | + def test_intersection_naming_behavior(self): |
| 654 | + #9965 |
| 655 | + idx_name_a = pd.Index([1,2,3], name='a') |
| 656 | + idx_name_b = pd.Index([4,5,6], name='b') |
| 657 | + idx2_name_a = pd.Index([2,9,8], name='a') |
| 658 | + |
| 659 | + stridx_name_stra = pd.Index(['1','2'], name='stra') |
| 660 | + stridx_name_a = pd.Index(['1','2'], name='a') |
| 661 | + |
| 662 | + idx_name_none = pd.Index(['1','2'], name=None) |
| 663 | + |
| 664 | + dateindex_name_a = pd.DatetimeIndex([datetime.today()], name='a') |
| 665 | + dateindex_name_b = pd.DatetimeIndex([datetime.today()], name='b') |
| 666 | + dateindex_name_None = pd.DatetimeIndex([datetime.today()], name=None) |
| 667 | + |
| 668 | + python_array = [1,2,3] |
| 669 | + numpy_array = np.array([1,2,3]) |
| 670 | + |
| 671 | + #index intersection index naming behavior |
| 672 | + self.assertEqual(idx_name_a.intersection(idx_name_b).name, None) |
| 673 | + self.assertEqual(idx_name_a.intersection(idx2_name_a).name, 'a') |
| 674 | + |
| 675 | + #index intersection array |
| 676 | + self.assertEqual(idx_name_a.intersection(python_array).name, 'a') |
| 677 | + self.assertEqual(idx_name_a.intersection(numpy_array).name, 'a') |
| 678 | + |
| 679 | + #index intersection index different dtype |
| 680 | + self.assertEqual(idx_name_a.intersection(stridx_name_a).name, 'a') |
| 681 | + self.assertEqual(idx_name_a.intersection(stridx_name_stra).name, None) |
| 682 | + |
| 683 | + #index intersection index with no name |
| 684 | + self.assertEqual(idx_name_a.intersection(idx_name_none).name, 'a') |
| 685 | + |
| 686 | + #index intersection dateindex |
| 687 | + self.assertEqual(idx_name_a.intersection(dateindex_name_a).name, 'a') |
| 688 | + self.assertEqual(idx_name_a.intersection(dateindex_name_b).name, None) |
| 689 | + self.assertEqual(idx_name_a.intersection(dateindex_name_None).name, 'a') |
| 690 | + |
| 691 | + #dateindex intersection |
| 692 | + self.assertEqual(dateindex_name_a.intersection(python_array).name, 'a') |
| 693 | + self.assertEqual(dateindex_name_a.intersection(numpy_array).name, 'a') |
| 694 | + |
| 695 | + self.assertEqual(dateindex_name_a.intersection(idx_name_none).name, 'a') |
| 696 | + self.assertEqual(dateindex_name_a.intersection(dateindex_name_b).name, None) |
| 697 | + self.assertEqual(dateindex_name_a.intersection(dateindex_name_None).name, 'a') |
| 698 | + self.assertEqual(dateindex_name_a.intersection(idx_name_a).name, 'a') |
| 699 | + |
| 700 | + def test_append_naming_behavior(self): |
| 701 | + #9965 |
| 702 | + idx_name_a = pd.Index([1,2,3], name='a') |
| 703 | + idx_name_b = pd.Index([4,5,6], name='b') |
| 704 | + idx2_name_a = pd.Index([2,9,8], name='a') |
| 705 | + |
| 706 | + stridx_name_stra = pd.Index(['1','2'], name='stra') |
| 707 | + stridx_name_a = pd.Index(['1','2'], name='a') |
| 708 | + |
| 709 | + idx_name_none = pd.Index(['1','2'], name=None) |
| 710 | + |
| 711 | + dateindex_name_a = pd.DatetimeIndex([datetime.today()], name='a') |
| 712 | + dateindex_name_b = pd.DatetimeIndex([datetime.today()], name='b') |
| 713 | + dateindex_name_None = pd.DatetimeIndex([datetime.today()], name=None) |
| 714 | + |
| 715 | + python_array = [1,2,3] |
| 716 | + python_array_transposed = [[1],[2],[3]] |
| 717 | + numpy_array = np.array([1,2,3]) |
| 718 | + |
| 719 | + #index append index naming behavior |
| 720 | + self.assertEqual(idx_name_a.append(idx_name_b).name, None) |
| 721 | + self.assertEqual(idx_name_a.append(idx2_name_a).name, 'a') |
| 722 | + |
| 723 | + #index append array |
| 724 | + self.assertEqual(idx_name_a.append(python_array_transposed).name, 'a') |
| 725 | + self.assertEqual(idx_name_a.append(numpy_array.T).name, 'a') |
| 726 | + |
| 727 | + #index append index different dtype |
| 728 | + self.assertEqual(idx_name_a.append(stridx_name_a).name, 'a') |
| 729 | + self.assertEqual(idx_name_a.append(stridx_name_stra).name, None) |
| 730 | + |
| 731 | + #index append index with no name |
| 732 | + self.assertEqual(idx_name_a.append(idx_name_none).name, 'a') |
| 733 | + |
| 734 | + #index append dateindex |
| 735 | + self.assertEqual(idx_name_a.append(dateindex_name_a).name, 'a') |
| 736 | + self.assertEqual(idx_name_a.append(dateindex_name_b).name, None) |
| 737 | + self.assertEqual(idx_name_a.append(dateindex_name_None).name, 'a') |
| 738 | + |
| 739 | + #dateindex append |
| 740 | + self.assertEqual(dateindex_name_a.append(python_array_transposed).name, 'a') |
| 741 | + self.assertEqual(dateindex_name_a.append(numpy_array.T).name, 'a') |
| 742 | + |
| 743 | + self.assertEqual(dateindex_name_a.append(idx_name_none).name, 'a') |
| 744 | + self.assertEqual(dateindex_name_a.append(dateindex_name_b).name, None) |
| 745 | + self.assertEqual(dateindex_name_a.append(dateindex_name_None).name, 'a') |
| 746 | + self.assertEqual(dateindex_name_a.append(idx_name_a).name, 'a') |
| 747 | + |
| 748 | + def test_intersection_preserves_name(self): |
| 749 | + #GH 9943 |
| 750 | + df = pd.DataFrame([np.nan, np.nan], columns = ['tags'], index=pd.Int64Index([4815961, 4815962], dtype='int64', name='id')) |
| 751 | + self.assertEqual(str(df), ' tags\nid \n4815961 NaN\n4815962 NaN') |
| 752 | + L = [4815962] |
| 753 | + self.assertEqual(list(L), list(df.index.intersection(L))) |
| 754 | + self.assertEqual( df.ix[L].tags.index.name, df.ix[df.index.intersection(L)].tags.index.name) |
| 755 | + assert_frame_equal(df.ix[L], df.ix[df.index.intersection(L)]) |
| 756 | + |
606 | 757 | def test_intersection(self):
|
607 | 758 | first = self.strIndex[:20]
|
608 | 759 | second = self.strIndex[:10]
|
@@ -679,7 +830,13 @@ def test_union(self):
|
679 | 830 |
|
680 | 831 | second.name = 'B'
|
681 | 832 | union = first.union(second)
|
682 |
| - self.assertIsNone(union.name) |
| 833 | + self.assertEqual(None, union.name) |
| 834 | + |
| 835 | + #union array-like |
| 836 | + print first |
| 837 | + print first.name |
| 838 | + union = first.union([1234]) |
| 839 | + self.assertEqual('A', union.name) |
683 | 840 |
|
684 | 841 | def test_add(self):
|
685 | 842 |
|
|
0 commit comments