22
33from __future__ import print_function
44
5+ import inspect
56import pytest
67
78from datetime import datetime , timedelta
89
910import numpy as np
1011
11- from pandas .compat import lrange
12+ from pandas .compat import lrange , PY2
1213from pandas import (DataFrame , Series , Index , MultiIndex ,
1314 RangeIndex , date_range , IntervalIndex ,
1415 to_datetime )
@@ -887,6 +888,9 @@ def test_rename_axis_style(self):
887888 result = df .rename ({'X' : 'x' , 'Y' : 'y' }, axis = 'index' )
888889 assert_frame_equal (result , expected )
889890
891+ result = df .rename (mapper = str .lower , axis = 'index' )
892+ assert_frame_equal (result , expected )
893+
890894 def test_rename_mapper_multi (self ):
891895 df = pd .DataFrame ({"A" : ['a' , 'b' ], "B" : ['c' , 'd' ],
892896 'C' : [1 , 2 ]}).set_index (["A" , "B" ])
@@ -929,6 +933,10 @@ def test_rename_axis_style_raises(self):
929933 with tm .assert_raises_regex (TypeError , None ):
930934 df .rename (str .lower , str .lower , str .lower )
931935
936+ # Duplicates
937+ with tm .assert_raises_regex (TypeError , "multiple values" ):
938+ df .rename (id , mapper = id )
939+
932940 def test_reindex_api_equivalence (self ):
933941 # equivalence of the labels/axis and index/columns API's
934942 df = DataFrame ([[1 , 2 , 3 ], [3 , 4 , 5 ], [5 , 6 , 7 ]],
@@ -956,6 +964,17 @@ def test_reindex_api_equivalence(self):
956964 for res in [res2 , res3 ]:
957965 tm .assert_frame_equal (res1 , res )
958966
967+ def test_rename_positional (self ):
968+ df = pd .DataFrame (columns = ['A' , 'B' ])
969+ with tm .assert_produces_warning (FutureWarning ) as rec :
970+ result = df .rename (None , str .lower )
971+ expected = pd .DataFrame (columns = ['a' , 'b' ])
972+ assert_frame_equal (result , expected )
973+ assert len (rec ) == 1
974+ message = str (rec [0 ].message )
975+ assert 'rename' in message
976+ assert 'Use named arguments' in message
977+
959978 def test_assign_columns (self ):
960979 self .frame ['hi' ] = 'there'
961980
@@ -981,12 +1000,27 @@ def test_set_index_preserve_categorical_dtype(self):
9811000
9821001 def test_ambiguous_warns (self ):
9831002 df = pd .DataFrame ({"A" : [1 , 2 ]})
984- with tm .assert_produces_warning (UserWarning ):
1003+ with tm .assert_produces_warning (FutureWarning ):
9851004 df .rename (id , id )
9861005
987- with tm .assert_produces_warning (UserWarning ):
1006+ with tm .assert_produces_warning (FutureWarning ):
9881007 df .rename ({0 : 10 }, {"A" : "B" })
9891008
1009+ @pytest .mark .skipif (PY2 , reason = "inspect.signature" )
1010+ def test_rename_signature (self ):
1011+ sig = inspect .signature (pd .DataFrame .rename )
1012+ parameters = set (sig .parameters )
1013+ assert parameters == {"self" , "mapper" , "index" , "columns" , "axis" ,
1014+ "inplace" , "copy" , "level" }
1015+
1016+ @pytest .mark .skipif (PY2 , reason = "inspect.signature" )
1017+ def test_reindex_signature (self ):
1018+ sig = inspect .signature (pd .DataFrame .reindex )
1019+ parameters = set (sig .parameters )
1020+ assert parameters == {"self" , "labels" , "index" , "columns" , "axis" ,
1021+ "limit" , "copy" , "level" , "method" ,
1022+ "fill_value" , "tolerance" }
1023+
9901024
9911025class TestIntervalIndex (object ):
9921026
0 commit comments