|
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, assert_frame_equal) |
| 20 | + assert_copy) |
21 | 21 | from pandas import compat
|
22 | 22 | from pandas.compat import long
|
23 | 23 |
|
@@ -272,8 +272,8 @@ def setUp(self):
|
272 | 272 | )
|
273 | 273 | self.setup_indices()
|
274 | 274 |
|
275 |
| - def create_index(self): |
276 |
| - return Index(list('abcde')) |
| 275 | + def create_index(self, content=list('abcde'), name=None): |
| 276 | + return Index(content, name=name) |
277 | 277 |
|
278 | 278 | def test_new_axis(self):
|
279 | 279 | new_index = self.dateIndex[None, :]
|
@@ -618,154 +618,105 @@ def test_shift(self):
|
618 | 618 |
|
619 | 619 | def test_union_naming_behavior(self):
|
620 | 620 | #9965
|
621 |
| - idx_name_a = pd.Index([1,2,3], name='a') |
622 |
| - idx_name_b = pd.Index([4,5,6], name='b') |
623 |
| - idx2_name_a = pd.Index([2,9,8], name='a') |
624 |
| - |
625 |
| - stridx_name_stra = pd.Index(['1','2'], name='stra') |
626 |
| - stridx_name_a = pd.Index(['1','2'], name='a') |
627 |
| - |
628 |
| - idx_name_none = pd.Index(['1','2'], name=None) |
629 |
| - |
630 |
| - dateindex_name_a = pd.DatetimeIndex([datetime.today()], name='a') |
631 |
| - dateindex_name_b = pd.DatetimeIndex([datetime.today()], name='b') |
632 |
| - dateindex_name_None = pd.DatetimeIndex([datetime.today()], name=None) |
633 |
| - |
634 |
| - python_array = [1,2,3] |
635 |
| - numpy_array = np.array([1,2,3]) |
636 |
| - |
637 |
| - #index union index naming behavior |
638 |
| - self.assertEqual(idx_name_a.union(idx_name_b).name, None) |
639 |
| - self.assertEqual(idx_name_a.union(idx2_name_a).name, 'a') |
640 |
| - |
641 |
| - #index union array |
642 |
| - self.assertEqual(idx_name_a.union(python_array).name, 'a') |
643 |
| - self.assertEqual(idx_name_a.union(numpy_array).name, 'a') |
644 |
| - |
645 |
| - #index union index different dtype |
646 |
| - self.assertEqual(idx_name_a.union(stridx_name_a).name, 'a') |
647 |
| - self.assertEqual(idx_name_a.union(stridx_name_stra).name, None) |
648 |
| - |
649 |
| - #index union index with no name |
650 |
| - self.assertEqual(idx_name_a.union(idx_name_none).name, 'a') |
651 |
| - |
652 |
| - #index union dateindex |
653 |
| - self.assertEqual(idx_name_a.union(dateindex_name_a).name, 'a') |
654 |
| - self.assertEqual(idx_name_a.union(dateindex_name_b).name, None) |
655 |
| - self.assertEqual(idx_name_a.union(dateindex_name_None).name, 'a') |
656 |
| - |
657 |
| - #dateindex union |
658 |
| - self.assertEqual(dateindex_name_a.union(python_array).name, 'a') |
659 |
| - self.assertEqual(dateindex_name_a.union(numpy_array).name, 'a') |
660 |
| - |
661 |
| - self.assertEqual(dateindex_name_a.union(idx_name_none).name, 'a') |
662 |
| - self.assertEqual(dateindex_name_a.union(dateindex_name_b).name, None) |
663 |
| - self.assertEqual(dateindex_name_a.union(dateindex_name_None).name, 'a') |
664 |
| - self.assertEqual(dateindex_name_a.union(idx_name_a).name, 'a') |
| 621 | + self.compare_naming([1,2,3],[4,5,6],[2,5,6], func_name='union') |
| 622 | + self.compare_naming(['1','2','3'],['4','5','6'],['2','5','6'], func_name='union') |
| 623 | + self.compare_naming([1,'2',3],[4,'5','6'],[2,3,6], func_name='union') |
| 624 | + self.compare_naming([1.,2.,3.],[4.,5.,6.],[2.,3.,6.], func_name='union') |
665 | 625 |
|
666 | 626 | def test_intersection_naming_behavior(self):
|
667 | 627 | #9965
|
668 |
| - idx_name_a = pd.Index([1,2,3], name='a') |
669 |
| - idx_name_b = pd.Index([4,5,6], name='b') |
670 |
| - idx2_name_a = pd.Index([2,9,8], name='a') |
671 |
| - |
672 |
| - stridx_name_stra = pd.Index(['1','2'], name='stra') |
673 |
| - stridx_name_a = pd.Index(['1','2'], name='a') |
674 |
| - |
675 |
| - idx_name_none = pd.Index(['1','2'], name=None) |
676 |
| - |
677 |
| - dateindex_name_a = pd.DatetimeIndex([datetime.today()], name='a') |
678 |
| - dateindex_name_b = pd.DatetimeIndex([datetime.today()], name='b') |
679 |
| - dateindex_name_None = pd.DatetimeIndex([datetime.today()], name=None) |
680 |
| - |
681 |
| - python_array = [1,2,3] |
682 |
| - numpy_array = np.array([1,2,3]) |
683 |
| - |
684 |
| - #index intersection index naming behavior |
685 |
| - self.assertEqual(idx_name_a.intersection(idx_name_b).name, None) |
686 |
| - self.assertEqual(idx_name_a.intersection(idx2_name_a).name, 'a') |
687 |
| - |
688 |
| - #index intersection array |
689 |
| - self.assertEqual(idx_name_a.intersection(python_array).name, 'a') |
690 |
| - self.assertEqual(idx_name_a.intersection(numpy_array).name, 'a') |
691 |
| - |
692 |
| - #index intersection index different dtype |
693 |
| - self.assertEqual(idx_name_a.intersection(stridx_name_a).name, 'a') |
694 |
| - self.assertEqual(idx_name_a.intersection(stridx_name_stra).name, None) |
695 |
| - |
696 |
| - #index intersection index with no name |
697 |
| - self.assertEqual(idx_name_a.intersection(idx_name_none).name, 'a') |
698 |
| - |
699 |
| - #index intersection dateindex |
700 |
| - self.assertEqual(idx_name_a.intersection(dateindex_name_a).name, 'a') |
701 |
| - self.assertEqual(idx_name_a.intersection(dateindex_name_b).name, None) |
702 |
| - self.assertEqual(idx_name_a.intersection(dateindex_name_None).name, 'a') |
703 |
| - |
704 |
| - #dateindex intersection |
705 |
| - self.assertEqual(dateindex_name_a.intersection(python_array).name, 'a') |
706 |
| - self.assertEqual(dateindex_name_a.intersection(numpy_array).name, 'a') |
707 |
| - |
708 |
| - self.assertEqual(dateindex_name_a.intersection(idx_name_none).name, 'a') |
709 |
| - self.assertEqual(dateindex_name_a.intersection(dateindex_name_b).name, None) |
710 |
| - self.assertEqual(dateindex_name_a.intersection(dateindex_name_None).name, 'a') |
711 |
| - self.assertEqual(dateindex_name_a.intersection(idx_name_a).name, 'a') |
| 628 | + self.compare_naming([1,2,3],[4,5,6],[2,5,6], func_name='intersection') |
| 629 | + self.compare_naming(['1','2','3'],['4','5','6'],['2','5','6'], func_name='intersection') |
| 630 | + self.compare_naming([1,'2',3],[4,'5','6'],[2,3,6], func_name='intersection') |
| 631 | + self.compare_naming([1.,2.,3.],[4.,5.,6.],[2.,3.,6.], func_name='intersection') |
712 | 632 |
|
713 | 633 | def test_append_naming_behavior(self):
|
714 | 634 | #9965
|
715 |
| - idx_name_a = pd.Index([1,2,3], name='a') |
716 |
| - idx_name_b = pd.Index([4,5,6], name='b') |
717 |
| - idx2_name_a = pd.Index([2,9,8], name='a') |
718 |
| - |
719 |
| - stridx_name_stra = pd.Index(['1','2'], name='stra') |
720 |
| - stridx_name_a = pd.Index(['1','2'], name='a') |
721 |
| - |
722 |
| - idx_name_none = pd.Index(['1','2'], name=None) |
723 |
| - |
724 |
| - dateindex_name_a = pd.DatetimeIndex([datetime.today()], name='a') |
725 |
| - dateindex_name_b = pd.DatetimeIndex([datetime.today()], name='b') |
726 |
| - dateindex_name_None = pd.DatetimeIndex([datetime.today()], name=None) |
727 |
| - |
728 |
| - python_array = [1,2,3] |
729 |
| - python_array_transposed = [[1],[2],[3]] |
730 |
| - numpy_array = np.array([1,2,3]) |
731 |
| - |
732 |
| - #index append index naming behavior |
733 |
| - self.assertEqual(idx_name_a.append(idx_name_b).name, None) |
734 |
| - self.assertEqual(idx_name_a.append(idx2_name_a).name, 'a') |
735 |
| - |
736 |
| - #index append array |
737 |
| - self.assertEqual(idx_name_a.append(python_array_transposed).name, 'a') |
738 |
| - self.assertEqual(idx_name_a.append(numpy_array.T).name, 'a') |
739 |
| - |
740 |
| - #index append index different dtype |
741 |
| - self.assertEqual(idx_name_a.append(stridx_name_a).name, 'a') |
742 |
| - self.assertEqual(idx_name_a.append(stridx_name_stra).name, None) |
743 |
| - |
744 |
| - #index append index with no name |
745 |
| - self.assertEqual(idx_name_a.append(idx_name_none).name, 'a') |
746 |
| - |
747 |
| - #index append dateindex |
748 |
| - self.assertEqual(idx_name_a.append(dateindex_name_a).name, 'a') |
749 |
| - self.assertEqual(idx_name_a.append(dateindex_name_b).name, None) |
750 |
| - self.assertEqual(idx_name_a.append(dateindex_name_None).name, 'a') |
751 |
| - |
752 |
| - #dateindex append |
753 |
| - self.assertEqual(dateindex_name_a.append(python_array_transposed).name, 'a') |
754 |
| - self.assertEqual(dateindex_name_a.append(numpy_array.T).name, 'a') |
755 |
| - |
756 |
| - self.assertEqual(dateindex_name_a.append(idx_name_none).name, 'a') |
757 |
| - self.assertEqual(dateindex_name_a.append(dateindex_name_b).name, None) |
758 |
| - self.assertEqual(dateindex_name_a.append(dateindex_name_None).name, 'a') |
759 |
| - self.assertEqual(dateindex_name_a.append(idx_name_a).name, 'a') |
| 635 | + self.compare_naming([1,2,3],[4,5,6],[2,5,6], func_name='append') |
| 636 | + self.compare_naming(['1','2','3'],['4','5','6'],['2','5','6'], func_name='append') |
| 637 | + self.compare_naming([1,'2',3],[4,'5','6'],[2,3,6], func_name='append') |
| 638 | + self.compare_naming([1.,2.,3.],[4.,5.,6.],[2.,3.,6.], func_name='append') |
| 639 | + |
| 640 | + def compare_naming(self, equal_values, disjunct_values, intersect_values, func_name='union'): |
| 641 | + ''' |
| 642 | + given arrays of values checks whether the function specified |
| 643 | + keeps the naming convention |
| 644 | +
|
| 645 | + euqual_values : values to be used for equal comparison of func_name |
| 646 | + disjunct_values : values to be used for disjunct comparison of func_name |
| 647 | + intersect_values : values to be used for intersect comparison of func_name |
| 648 | +
|
| 649 | + func_name : either union, append, intersection |
| 650 | + ''' |
| 651 | + idx_name_a = self.create_index(content=equal_values, name='a') |
| 652 | + idx_name_a_function = getattr(idx_name_a, func_name) |
| 653 | + |
| 654 | + equal_idx_name_a = self.create_index(content=equal_values, name='a') |
| 655 | + equal_idx_name_b = self.create_index(content=equal_values, name='b') |
| 656 | + equal_idx_name_none = self.create_index(content=equal_values, name=None) |
| 657 | + equal_python_array = equal_values |
| 658 | + equal_numpy_array = np.array(equal_values) |
| 659 | + |
| 660 | + empty_idx_name_a = self.create_index(content=[], name='a') |
| 661 | + empty_idx_name_b = self.create_index(content=[], name='b') |
| 662 | + empty_idx_name_none = self.create_index(content=[], name=None) |
| 663 | + empty_python_array = [] |
| 664 | + empty_numpy_array = np.array([]) |
| 665 | + |
| 666 | + disjunct_idx_name_a = self.create_index(content=disjunct_values, name='a') |
| 667 | + disjunct_idx_name_b = self.create_index(content=disjunct_values, name='b') |
| 668 | + disjunct_idx_name_none = self.create_index(content=disjunct_values, name=None) |
| 669 | + disjunct_python_array = disjunct_values |
| 670 | + disjunct_numpy_array = np.array(disjunct_values) |
| 671 | + |
| 672 | + intersect_idx_name_a = self.create_index(content=intersect_values, name='a') |
| 673 | + intersect_idx_name_b = self.create_index(content=intersect_values, name='b') |
| 674 | + intersect_idx_name_none = self.create_index(content=intersect_values, name=None) |
| 675 | + intersect_python_array = intersect_values |
| 676 | + intersect_numpy_array = np.array(intersect_values) |
| 677 | + |
| 678 | + #index union naming behavior in equal contents |
| 679 | + self.assertEqual(idx_name_a_function(equal_idx_name_a).name, idx_name_a.name) |
| 680 | + self.assertEqual(idx_name_a_function(equal_idx_name_b).name, None) |
| 681 | + self.assertEqual(idx_name_a_function(equal_idx_name_none).name, idx_name_a.name) |
| 682 | + #self.assertEqual(idx_name_a_function(equal_python_array).name, idx_name_a.name) |
| 683 | + self.assertEqual(idx_name_a_function(equal_numpy_array).name, idx_name_a.name) |
| 684 | + |
| 685 | + #index union naming behavior in empty second index |
| 686 | + self.assertEqual(idx_name_a_function(empty_idx_name_a).name, idx_name_a.name) |
| 687 | + self.assertEqual(idx_name_a_function(empty_idx_name_b).name, None) |
| 688 | + self.assertEqual(idx_name_a_function(empty_idx_name_none).name, idx_name_a.name) |
| 689 | + #self.assertEqual(idx_name_a_function(empty_python_array).name, idx_name_a.name) |
| 690 | + self.assertEqual(idx_name_a_function(empty_numpy_array).name, idx_name_a.name) |
| 691 | + |
| 692 | + #index union naming behavior with disjunct contents |
| 693 | + self.assertEqual(idx_name_a_function(disjunct_idx_name_a).name, idx_name_a.name) |
| 694 | + self.assertEqual(idx_name_a_function(disjunct_idx_name_b).name, None) |
| 695 | + self.assertEqual(idx_name_a_function(disjunct_idx_name_none).name, idx_name_a.name) |
| 696 | + #self.assertEqual(idx_name_a_function(disjunct_python_array).name, idx_name_a.name) |
| 697 | + self.assertEqual(idx_name_a_function(disjunct_numpy_array).name, idx_name_a.name) |
| 698 | + |
| 699 | + #index union naming behavior with intersecting content |
| 700 | + self.assertEqual(idx_name_a_function(intersect_idx_name_a).name, idx_name_a.name) |
| 701 | + self.assertEqual(idx_name_a_function(intersect_idx_name_b).name, None) |
| 702 | + self.assertEqual(idx_name_a_function(intersect_idx_name_none).name, idx_name_a.name) |
| 703 | + #self.assertEqual(idx_name_a_function(intersect_python_array).name, idx_name_a.name) |
| 704 | + self.assertEqual(idx_name_a_function(intersect_numpy_array).name, idx_name_a.name) |
760 | 705 |
|
761 | 706 | def test_intersection_preserves_name(self):
|
762 | 707 | #GH 9943
|
763 |
| - df = pd.DataFrame([np.nan, np.nan], columns = ['tags'], index=pd.Int64Index([4815961, 4815962], dtype='int64', name='id')) |
764 |
| - self.assertEqual(str(df), ' tags\nid \n4815961 NaN\n4815962 NaN') |
| 708 | + df = pd.DataFrame([np.nan, np.nan], |
| 709 | + columns = ['tags'], |
| 710 | + index=pd.Int64Index([4815961, 4815962], |
| 711 | + dtype='int64', name='id')) |
| 712 | + self.assertEqual(str(df), |
| 713 | + ' tags\nid \n4815961 NaN\n4815962 NaN') |
765 | 714 | L = [4815962]
|
766 | 715 | self.assertEqual(list(L), list(df.index.intersection(L)))
|
767 |
| - self.assertEqual( df.ix[L].tags.index.name, df.ix[df.index.intersection(L)].tags.index.name) |
768 |
| - assert_frame_equal(df.ix[L], df.ix[df.index.intersection(L)]) |
| 716 | + self.assertEqual( df.ix[L].tags.index.name, |
| 717 | + df.ix[df.index.intersection(L)].tags.index.name) |
| 718 | + self.assertEqual( df.ix[L].index.name, |
| 719 | + df.ix[df.index.intersection(L)].index.name) |
769 | 720 |
|
770 | 721 | def test_intersection(self):
|
771 | 722 | first = self.strIndex[:20]
|
|
0 commit comments