Skip to content

Commit 01ea9cb

Browse files
committed
ENH: added add_prefix / add_suffix methods to DataFrame
1 parent 441e8d5 commit 01ea9cb

File tree

5 files changed

+44
-38
lines changed

5 files changed

+44
-38
lines changed

pandas/core/frame.py

+30
Original file line numberDiff line numberDiff line change
@@ -1398,6 +1398,36 @@ def _rename_columns_inplace(self, mapper):
13981398
self._data = self._data.rename_items(mapper)
13991399
self._series_cache.clear()
14001400

1401+
def add_prefix(self, prefix):
1402+
"""
1403+
Concatenate prefix string with panel items names.
1404+
1405+
Parameters
1406+
----------
1407+
prefix : string
1408+
1409+
Returns
1410+
-------
1411+
LongPanel
1412+
"""
1413+
f = (('%s' % prefix) + '%s').__mod__
1414+
return self.rename(columns=f)
1415+
1416+
def add_suffix(self, suffix):
1417+
"""
1418+
Concatenate suffix string with panel items names
1419+
1420+
Parameters
1421+
----------
1422+
suffix : string
1423+
1424+
Returns
1425+
-------
1426+
with_suffix : DataFrame
1427+
"""
1428+
f = ('%s' + ('%s' % suffix)).__mod__
1429+
return self.rename(columns=f)
1430+
14011431
#----------------------------------------------------------------------
14021432
# Arithmetic / combination related
14031433

pandas/core/panel.py

+1-31
Original file line numberDiff line numberDiff line change
@@ -1259,7 +1259,7 @@ def get_axis_dummies(self, axis='minor', transform=None,
12591259
if prefix is None:
12601260
prefix = ''
12611261

1262-
result = result.addPrefix(prefix)
1262+
result = result.add_prefix(prefix)
12631263

12641264
return result
12651265

@@ -1321,28 +1321,6 @@ def apply(self, f, axis='major', broadcast=False):
13211321
return LongPanel(new_values, columns=self.items,
13221322
index=self.index)
13231323

1324-
def addPrefix(self, prefix=None):
1325-
"""
1326-
Concatenate prefix string with panel items names.
1327-
1328-
Parameters
1329-
----------
1330-
prefix : string
1331-
1332-
Returns
1333-
-------
1334-
LongPanel
1335-
1336-
Note
1337-
----
1338-
does *not* copy values matrix
1339-
"""
1340-
new_items = [_prefix_item(item, prefix) for item in self.items]
1341-
1342-
return LongPanel(self.values, columns=new_items,
1343-
index=self.index)
1344-
1345-
13461324
def _prep_ndarray(values, copy=True):
13471325
if not isinstance(values, np.ndarray):
13481326
values = np.asarray(values)
@@ -1355,14 +1333,6 @@ def _prep_ndarray(values, copy=True):
13551333
assert(values.ndim == 3)
13561334
return values
13571335

1358-
1359-
def _prefix_item(item, prefix=None):
1360-
if prefix is None:
1361-
return item
1362-
1363-
template = '%s%s'
1364-
return template % (prefix, item)
1365-
13661336
def _homogenize_dict(frames, intersect=True, dtype=None):
13671337
"""
13681338
Conform set of DataFrame-like objects to either an intersection

pandas/stats/plm.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,7 @@ def _add_entity_effects(self, panel):
271271

272272
dummies = dummies.filter(dummies.items - [to_exclude])
273273

274-
dummies = dummies.addPrefix('FE_')
274+
dummies = dummies.add_prefix('FE_')
275275
panel = panel.join(dummies)
276276

277277
return panel
@@ -317,7 +317,7 @@ def _add_categorical_dummies(self, panel, cat_mappings):
317317
dropped_dummy = True
318318

319319
dummies = _convertDummies(dummies, cat_mappings.get(effect))
320-
dummies = dummies.addPrefix('%s_' % effect)
320+
dummies = dummies.add_prefix('%s_' % effect)
321321
panel = panel.join(dummies)
322322

323323
return panel

pandas/tests/test_frame.py

+9
Original file line numberDiff line numberDiff line change
@@ -1889,6 +1889,15 @@ def test_rename(self):
18891889
renamed = self.frame.T.rename(index={'C' : 'foo', 'D' : 'bar'})
18901890
self.assert_(np.array_equal(renamed.index, ['A', 'B', 'foo', 'bar']))
18911891

1892+
def test_add_prefix_suffix(self):
1893+
with_prefix = self.frame.add_prefix('foo#')
1894+
expected = ['foo#%s' % c for c in self.frame.columns]
1895+
self.assert_(np.array_equal(with_prefix.columns, expected))
1896+
1897+
with_suffix = self.frame.add_suffix('#foo')
1898+
expected = ['%s#foo' % c for c in self.frame.columns]
1899+
self.assert_(np.array_equal(with_suffix.columns, expected))
1900+
18921901
#----------------------------------------------------------------------
18931902
# Time series related
18941903

pandas/tests/test_panel.py

+2-5
Original file line numberDiff line numberDiff line change
@@ -964,13 +964,10 @@ def test_join(self):
964964
def test_merge(self):
965965
pass
966966

967-
def test_addPrefix(self):
968-
lp = self.panel.addPrefix('foo#')
967+
def test_add_prefix(self):
968+
lp = self.panel.add_prefix('foo#')
969969
self.assertEqual(lp.items[0], 'foo#ItemA')
970970

971-
lp = self.panel.addPrefix()
972-
assert_panel_equal(lp.to_wide(), self.panel.to_wide())
973-
974971
def test_pivot(self):
975972
from pandas.core.reshape import _slow_pivot
976973

0 commit comments

Comments
 (0)