2
2
3
3
from __future__ import print_function
4
4
5
+ import inspect
5
6
import pytest
6
7
7
8
from datetime import datetime , timedelta
8
9
9
10
import numpy as np
10
11
11
- from pandas .compat import lrange
12
+ from pandas .compat import lrange , PY2
12
13
from pandas import (DataFrame , Series , Index , MultiIndex ,
13
14
RangeIndex , date_range , IntervalIndex ,
14
15
to_datetime )
@@ -887,6 +888,9 @@ def test_rename_axis_style(self):
887
888
result = df .rename ({'X' : 'x' , 'Y' : 'y' }, axis = 'index' )
888
889
assert_frame_equal (result , expected )
889
890
891
+ result = df .rename (mapper = str .lower , axis = 'index' )
892
+ assert_frame_equal (result , expected )
893
+
890
894
def test_rename_mapper_multi (self ):
891
895
df = pd .DataFrame ({"A" : ['a' , 'b' ], "B" : ['c' , 'd' ],
892
896
'C' : [1 , 2 ]}).set_index (["A" , "B" ])
@@ -929,6 +933,10 @@ def test_rename_axis_style_raises(self):
929
933
with tm .assert_raises_regex (TypeError , None ):
930
934
df .rename (str .lower , str .lower , str .lower )
931
935
936
+ # Duplicates
937
+ with tm .assert_raises_regex (TypeError , "multiple values" ):
938
+ df .rename (id , mapper = id )
939
+
932
940
def test_reindex_api_equivalence (self ):
933
941
# equivalence of the labels/axis and index/columns API's
934
942
df = DataFrame ([[1 , 2 , 3 ], [3 , 4 , 5 ], [5 , 6 , 7 ]],
@@ -956,6 +964,17 @@ def test_reindex_api_equivalence(self):
956
964
for res in [res2 , res3 ]:
957
965
tm .assert_frame_equal (res1 , res )
958
966
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
+
959
978
def test_assign_columns (self ):
960
979
self .frame ['hi' ] = 'there'
961
980
@@ -981,12 +1000,27 @@ def test_set_index_preserve_categorical_dtype(self):
981
1000
982
1001
def test_ambiguous_warns (self ):
983
1002
df = pd .DataFrame ({"A" : [1 , 2 ]})
984
- with tm .assert_produces_warning (UserWarning ):
1003
+ with tm .assert_produces_warning (FutureWarning ):
985
1004
df .rename (id , id )
986
1005
987
- with tm .assert_produces_warning (UserWarning ):
1006
+ with tm .assert_produces_warning (FutureWarning ):
988
1007
df .rename ({0 : 10 }, {"A" : "B" })
989
1008
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
+
990
1024
991
1025
class TestIntervalIndex (object ):
992
1026
0 commit comments