@@ -1278,39 +1278,52 @@ def _set_names(self, values, level=None):
1278
1278
1279
1279
def set_names (self , names , level = None , inplace = False ):
1280
1280
"""
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.
1282
1284
1283
1285
Parameters
1284
1286
----------
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.
1292
1295
1293
1296
Returns
1294
1297
-------
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.
1296
1304
1297
1305
Examples
1298
1306
--------
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'])
1314
1327
"""
1315
1328
1316
1329
from .multi import MultiIndex
@@ -1319,7 +1332,8 @@ def set_names(self, names, level=None, inplace=False):
1319
1332
1320
1333
if level is not None and not is_list_like (level ) and is_list_like (
1321
1334
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 )
1323
1337
1324
1338
if not is_list_like (names ) and level is None and self .nlevels > 1 :
1325
1339
raise TypeError ("Must pass list-like as `names`." )
@@ -1339,18 +1353,48 @@ def set_names(self, names, level=None, inplace=False):
1339
1353
1340
1354
def rename (self , name , inplace = False ):
1341
1355
"""
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.
1343
1360
1344
1361
Parameters
1345
1362
----------
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.
1350
1368
1351
1369
Returns
1352
1370
-------
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`.
1354
1398
"""
1355
1399
return self .set_names ([name ], inplace = inplace )
1356
1400
0 commit comments