2013-07-03 11 views
5

Tworzę serię z ramki danych, z jedną kolumną df będącą indeksem, a drugą kolumną będącą danymi dla serii.Pandy - tworzenie serii kończy się NaN po przekazaniu indeksu?

To jest mój kod:

miniframe = attendframe[:20] 
s = pd.Series(miniframe.yes, index = miniframe.event) 
s[:10] 

Jednakże, jeśli zawierają index = miniframe.event część, mam pustą serię jak poniżej:

1159822043 NaN 
686467261  NaN 
1186208412 NaN 
2621578336 NaN 
855842686  NaN 
2018671985 NaN 
488116622  NaN 
1273761447 NaN 
2688888297 NaN 
3870329460 NaN 

Oryginalny dataframe wygląda mniej więcej tak:

  event            yes \ 
0 1159822043 1975964455 252302513 4226086795 3805886383 142... 
1 686467261 2394228942 2686116898 1056558062 3792942231 41... 
2 1186208412            NaN 
3 2621578336            NaN 
4 855842686 2406118796 3550897984 294255260 1125817077 109... 
5 2018671985            NaN 
6 488116622 4145960786 2550625355 2577667841 1575121941 28... 
7 1273761447 2680366192 2151335654 3447231284 3021641283 17... 
8 2688888297 298428624 2292079981 1819927116 1843127538 410... 
9 3870329460            NaN 
10 3041357942 4238605842 769099880 4281206081 1756250815 187... 

Czy jest szansa, że ​​ktoś może mi w tym pomóc? Pracowałem nad tym przez tydzień i nie mam pomysłów!

+0

spróbuj tego: '' attendframe.set_index ('zdarzenie') ix. [20, 'tak'] '' – Jeff

Odpowiedz

2
In [84]: df = DataFrame(dict(event = randint(10,100,(100)), yes = ['foo','bar']*50)) 

In [85]: df.loc[[2,3,5,10,15],'yes'] = np.nan 

In [86]: df.head(10) 
Out[86]: 
    event yes 
0  47 foo 
1  94 bar 
2  71 NaN 
3  62 NaN 
4  43 foo 
5  60 NaN 
6  90 foo 
7  43 bar 
8  15 foo 
9  16 bar 

In [87]: mini = df[:20] 

In [88]: mini 
Out[88]: 
    event yes 
0  47 foo 
1  94 bar 
2  71 NaN 
3  62 NaN 
4  43 foo 
5  60 NaN 
6  90 foo 
7  43 bar 
8  15 foo 
9  16 bar 
10  26 NaN 
11  64 bar 
12  82 foo 
13  63 bar 
14  16 foo 
15  78 NaN 
16  49 foo 
17  32 bar 
18  34 foo 
19  46 bar 

In [89]: Series(mini.yes.values,mini.event).iloc[:10] 
Out[89]: 
event 
47  foo 
94  bar 
71  NaN 
62  NaN 
43  foo 
60  NaN 
90  foo 
43  bar 
15  foo 
16  bar 
dtype: object 

Należy pamiętać, że jest to jeden z tych momentów, gdzie .ix robi coś złego; używać .iloc i być jawne (tak zignorować mój komentarz z góry!)

In [92]: df.set_index('event').iloc[:10].loc[:,'yes'] 
Out[92]: 
event 
47  foo 
94  bar 
71  NaN 
62  NaN 
43  foo 
60  NaN 
90  foo 
43  bar 
15  foo 
16  bar 
Name: yes, dtype: object 
+0

Niesamowite odpowiedź. Czy mogę prosić o jedno wyjaśnienie? Prawdziwym kluczem do twojego kodu były mini.yes. * Values ​​* - dlaczego potrzebuję uzyskać dostęp do wartości kolumny, aby je sparsować do obiektu serii? – analystic

+1

wartości daje u powrotem podstawowego ndarray; pozwala na mapowanie wartości za pomocą nowego indeksu (zdarzenia); przekazanie szeregu do konstruktora serii i nowy indeks zostanie ponownie zwindeksowany przy użyciu przekazanego indeksu, a nie tego, czego chcesz w tym przypadku. – Jeff

+0

To ma teraz sens! Dzięki jeszcze raz! – analystic

Powiązane problemy