@@ -2333,14 +2333,23 @@ def reindex_like(self, other, method=None, copy=True, limit=None,
2333
2333
2334
2334
return self .reindex (** d )
2335
2335
2336
- def drop (self , labels , axis = 0 , level = None , inplace = False , errors = 'raise' ):
2336
+ def drop (self , labels = None , axis = 0 , index = None , columns = None , level = None ,
2337
+ inplace = False , errors = 'raise' ):
2337
2338
"""
2338
2339
Return new object with labels in requested axis removed.
2339
2340
2340
2341
Parameters
2341
2342
----------
2342
2343
labels : single label or list-like
2344
+ Index or column labels to drop.
2343
2345
axis : int or axis name
2346
+ Whether to drop labels from the index (0 / 'index') or
2347
+ columns (1 / 'columns').
2348
+ index, columns : single label or list-like
2349
+ Alternative to specifying `axis` (``labels, axis=1`` is
2350
+ equivalent to ``columns=labels``).
2351
+
2352
+ .. versionadded:: 0.21.0
2344
2353
level : int or level name, default None
2345
2354
For MultiIndex
2346
2355
inplace : bool, default False
@@ -2354,36 +2363,80 @@ def drop(self, labels, axis=0, level=None, inplace=False, errors='raise'):
2354
2363
2355
2364
Examples
2356
2365
--------
2357
- >>> df = pd.DataFrame([[1, 2, 3, 4],
2358
- ... [5, 6, 7, 8],
2359
- ... [9, 1, 2, 3],
2360
- ... [4, 5, 6, 7]
2361
- ... ],
2362
- ... columns=list('ABCD'))
2366
+ >>> df = pd.DataFrame(np.arange(12).reshape(3,4),
2367
+ columns=['A', 'B', 'C', 'D'])
2363
2368
>>> df
2364
- A B C D
2365
- 0 1 2 3 4
2366
- 1 5 6 7 8
2367
- 2 9 1 2 3
2368
- 3 4 5 6 7
2369
+ A B C D
2370
+ 0 0 1 2 3
2371
+ 1 4 5 6 7
2372
+ 2 8 9 10 11
2373
+
2374
+ Drop columns
2375
+
2376
+ >>> df.drop(['B', 'C'], axis=1)
2377
+ A D
2378
+ 0 0 3
2379
+ 1 4 7
2380
+ 2 8 11
2381
+
2382
+ >>> df.drop(columns=['B', 'C'])
2383
+ A D
2384
+ 0 0 3
2385
+ 1 4 7
2386
+ 2 8 11
2369
2387
2370
2388
Drop a row by index
2371
2389
2372
2390
>>> df.drop([0, 1])
2373
- A B C D
2374
- 2 9 1 2 3
2375
- 3 4 5 6 7
2391
+ A B C D
2392
+ 2 8 9 10 11
2376
2393
2377
- Drop columns
2394
+ Notes
2395
+ -----
2396
+ Specifying both `labels` and `index` or `columns` will raise a
2397
+ ValueError.
2378
2398
2379
- >>> df.drop(['A', 'B'], axis=1)
2380
- C D
2381
- 0 3 4
2382
- 1 7 8
2383
- 2 2 3
2384
- 3 6 7
2385
2399
"""
2386
2400
inplace = validate_bool_kwarg (inplace , 'inplace' )
2401
+
2402
+ if labels is not None :
2403
+ if index is not None or columns is not None :
2404
+ raise ValueError ("Cannot specify both 'labels' and "
2405
+ "'index'/'columns'" )
2406
+ axis_name = self ._get_axis_name (axis )
2407
+ axes = {axis_name : labels }
2408
+ elif index is not None or columns is not None :
2409
+ axes , _ = self ._construct_axes_from_arguments ((index , columns ), {})
2410
+ else :
2411
+ raise ValueError ("Need to specify at least one of 'labels', "
2412
+ "'index' or 'columns'" )
2413
+
2414
+ obj = self
2415
+
2416
+ for axis , labels in axes .items ():
2417
+ if labels is not None :
2418
+ obj = obj ._drop_axis (labels , axis , level = level , errors = errors )
2419
+
2420
+ if inplace :
2421
+ self ._update_inplace (obj )
2422
+ else :
2423
+ return obj
2424
+
2425
+ def _drop_axis (self , labels , axis , level = None , errors = 'raise' ):
2426
+ """
2427
+ Drop labels from specified axis. Used in the ``drop`` method
2428
+ internally.
2429
+
2430
+ Parameters
2431
+ ----------
2432
+ labels : single label or list-like
2433
+ axis : int or axis name
2434
+ level : int or level name, default None
2435
+ For MultiIndex
2436
+ errors : {'ignore', 'raise'}, default 'raise'
2437
+ If 'ignore', suppress error and existing labels are dropped.
2438
+
2439
+ """
2387
2440
axis = self ._get_axis_number (axis )
2388
2441
axis_name = self ._get_axis_name (axis )
2389
2442
axis , axis_ = self ._get_axis (axis ), axis
@@ -2416,10 +2469,7 @@ def drop(self, labels, axis=0, level=None, inplace=False, errors='raise'):
2416
2469
2417
2470
result = self .loc [tuple (slicer )]
2418
2471
2419
- if inplace :
2420
- self ._update_inplace (result )
2421
- else :
2422
- return result
2472
+ return result
2423
2473
2424
2474
def _update_inplace (self , result , verify_is_copy = True ):
2425
2475
"""
0 commit comments