Editing data in a hierarchical indexed data frame

How can I change each element in a hierarchical indexed DataFrame? For example, maybe I want to convert strings to float:

from pandas import DataFrame f = DataFrame({'a': ['1,000','2,000','3,000'], 'b': ['2,000','3,000','4,000']}) f.columns = [['level1', 'level1'],['item1', 'item2']] f Out[152]: level1 item1 item2 0 1,000 2,000 1 2,000 3,000 2 3,000 4,000 

I tried this:

 def clean(group): group = group.map(lambda x: x.replace(',', '')) return group f.apply(clean) Out[153]: (level1, item1) (level1, item2) 0 1000 2000 1 2000 3000 2 3000 4000 

As you can see, it changes hierarchical indexing a bit. How can i avoid this? Or maybe there is a better way.

thanks

+7
source share
1 answer

Pass the axis parameter to the apply function:

 In [265]: f.apply(clean, axis=1) Out[265]: level1 item1 item2 0 1000 2000 1 2000 3000 2 3000 4000 

If both axes have hierarchical indexes, a workaround:

 In [316]: f.index = [[1,2,3],[1,2,3]] In [317]: f Out[317]: level1 item1 item2 1 1 1,000 2,000 2 2 2,000 3,000 3 3 3,000 4,000 In [314]: f.apply(clean, axis=1).reindex(f.index) Out[314]: level1 item1 item2 1 1 1000 2000 2 2 2000 3000 3 3 3000 4000 
+4
source

All Articles