@@ -1278,39 +1278,52 @@ def _set_names(self, values, level=None):
12781278
12791279 def set_names (self , names , level = None , inplace = False ):
12801280 """
1281- Set new names on index. Defaults to returning new index.
1281+ Set Index or MultiIndex name.
1282+
1283+ Able to set new names partially and by level.
12821284
12831285 Parameters
12841286 ----------
1285- names : str or sequence
1286- name(s) to set
1287- level : int, level name, or sequence of int/level names (default None)
1288- If the index is a MultiIndex (hierarchical), level(s) to set (None
1289- for all levels). Otherwise level must be None
1290- inplace : bool
1291- if True, mutates in place
1287+ names : label or list of label
1288+ Name(s) to set.
1289+ level : int, label or list of int or label, optional
1290+ If the index is a MultiIndex, level(s) to set (None for all
1291+ levels). Otherwise level must be None.
1292+ inplace : bool, default False
1293+ Modifies the object directly, instead of creating a new Index or
1294+ MultiIndex.
12921295
12931296 Returns
12941297 -------
1295- new index (of same type and class...etc) [if inplace, returns None]
1298+ Index
1299+ The same type as the caller or None if inplace is True.
1300+
1301+ See Also
1302+ --------
1303+ Index.rename : Able to set new names without level.
12961304
12971305 Examples
12981306 --------
1299- >>> pd.Index([1, 2, 3, 4]).set_names('foo')
1300- Int64Index([1, 2, 3, 4], dtype='int64', name='foo')
1301- >>> pd.Index([1, 2, 3, 4]).set_names(['foo'])
1302- Int64Index([1, 2, 3, 4], dtype='int64', name='foo')
1303- >>> idx = pd.MultiIndex.from_tuples([(1, u'one'), (1, u'two'),
1304- (2, u'one'), (2, u'two')],
1305- names=['foo', 'bar'])
1306- >>> idx.set_names(['baz', 'quz'])
1307- MultiIndex(levels=[[1, 2], [u'one', u'two']],
1308- labels=[[0, 0, 1, 1], [0, 1, 0, 1]],
1309- names=[u'baz', u'quz'])
1310- >>> idx.set_names('baz', level=0)
1311- MultiIndex(levels=[[1, 2], [u'one', u'two']],
1312- labels=[[0, 0, 1, 1], [0, 1, 0, 1]],
1313- names=[u'baz', u'bar'])
1307+ >>> idx = pd.Index([1, 2, 3, 4])
1308+ >>> idx
1309+ Int64Index([1, 2, 3, 4], dtype='int64')
1310+ >>> idx.set_names('quarter')
1311+ Int64Index([1, 2, 3, 4], dtype='int64', name='quarter')
1312+
1313+ >>> idx = pd.MultiIndex.from_product([['python', 'cobra'],
1314+ ... [2018, 2019]])
1315+ >>> idx
1316+ MultiIndex(levels=[['cobra', 'python'], [2018, 2019]],
1317+ labels=[[1, 1, 0, 0], [0, 1, 0, 1]])
1318+ >>> idx.set_names(['kind', 'year'], inplace=True)
1319+ >>> idx
1320+ MultiIndex(levels=[['cobra', 'python'], [2018, 2019]],
1321+ labels=[[1, 1, 0, 0], [0, 1, 0, 1]],
1322+ names=['kind', 'year'])
1323+ >>> idx.set_names('species', level=0)
1324+ MultiIndex(levels=[['cobra', 'python'], [2018, 2019]],
1325+ labels=[[1, 1, 0, 0], [0, 1, 0, 1]],
1326+ names=['species', 'year'])
13141327 """
13151328
13161329 from .multi import MultiIndex
@@ -1319,7 +1332,8 @@ def set_names(self, names, level=None, inplace=False):
13191332
13201333 if level is not None and not is_list_like (level ) and is_list_like (
13211334 names ):
1322- raise TypeError ("Names must be a string" )
1335+ msg = "Names must be a string when a single level is provided."
1336+ raise TypeError (msg )
13231337
13241338 if not is_list_like (names ) and level is None and self .nlevels > 1 :
13251339 raise TypeError ("Must pass list-like as `names`." )
@@ -1339,18 +1353,48 @@ def set_names(self, names, level=None, inplace=False):
13391353
13401354 def rename (self , name , inplace = False ):
13411355 """
1342- Set new names on index. Defaults to returning new index.
1356+ Alter Index or MultiIndex name.
1357+
1358+ Able to set new names without level. Defaults to returning new index.
1359+ Length of names must match number of levels in MultiIndex.
13431360
13441361 Parameters
13451362 ----------
1346- name : str or list
1347- name to set
1348- inplace : bool
1349- if True, mutates in place
1363+ name : label or list of labels
1364+ Name(s) to set.
1365+ inplace : boolean, default False
1366+ Modifies the object directly, instead of creating a new Index or
1367+ MultiIndex.
13501368
13511369 Returns
13521370 -------
1353- new index (of same type and class...etc) [if inplace, returns None]
1371+ Index
1372+ The same type as the caller or None if inplace is True.
1373+
1374+ See Also
1375+ --------
1376+ Index.set_names : Able to set new names partially and by level.
1377+
1378+ Examples
1379+ --------
1380+ >>> idx = pd.Index(['A', 'C', 'A', 'B'], name='score')
1381+ >>> idx.rename('grade')
1382+ Index(['A', 'C', 'A', 'B'], dtype='object', name='grade')
1383+
1384+ >>> idx = pd.MultiIndex.from_product([['python', 'cobra'],
1385+ ... [2018, 2019]],
1386+ ... names=['kind', 'year'])
1387+ >>> idx
1388+ MultiIndex(levels=[['cobra', 'python'], [2018, 2019]],
1389+ labels=[[1, 1, 0, 0], [0, 1, 0, 1]],
1390+ names=['kind', 'year'])
1391+ >>> idx.rename(['species', 'year'])
1392+ MultiIndex(levels=[['cobra', 'python'], [2018, 2019]],
1393+ labels=[[1, 1, 0, 0], [0, 1, 0, 1]],
1394+ names=['species', 'year'])
1395+ >>> idx.rename('species')
1396+ Traceback (most recent call last):
1397+ TypeError: Must pass list-like as `names`.
13541398 """
13551399 return self .set_names ([name ], inplace = inplace )
13561400
0 commit comments