2012-12-24 13 views
7

Jak zmienić każdy element w DataFrame z hierarchicznym indeksowaniem? Na przykład, może chcesz przekonwertować ciągi do pływaków:Zmienianie danych w ramce danych z hierarchicznym indeksowaniem

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 

Próbowałem to:

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 

Jak widać, zmienia hierarchicznych indeksowanie całkiem sporo. Jak mogę tego uniknąć? A może jest lepszy sposób.

Dzięki

Odpowiedz

4

Przepuścić opcję axis do funkcji apply:

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

Kiedy obie osie mają indeksy hierarchicznych oto obejście:

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 
+0

Wielki. Czy stosuje się przekazywać kolumny, w tym element 1, element 2, gdy używam osi = 0? Co dzieje się, gdy istnieje hierarchiczny indeks w kolumnach i wierszach? –

+0

Uhm ... Próbowałem już tego i "spłaszczyło" poziomy. Czy znasz jakieś rozwiązanie? –

+0

@RobertSmith Jaką wersję pandy używasz? Nie spłaszcza się dla mnie na "0.10" (chociaż 'applymap' robi). –

Powiązane problemy