2016-12-18 27 views
5

Mam słownika, który wygląda jak poniżejJak ustawić indeks podczas konwersji słownika na ramkę danych?

defaultdict(list, 
     {'Open': ['47.47', '47.46', '47.38', ...], 
     'Close': ['47.48', '47.45', '47.40', ...], 
     'Date': ['2016/11/22 07:00:00', '2016/11/22 06:59:00','2016/11/22 06:58:00', ...]}) 

Moim celem jest przekształcenie tego słownika do dataframe i ustawić „data” wartości klucza jako indeks dataframe.

mogę zrobić tę pracę przez poniżej polecenia

df = pd.DataFrame(dictionary, columns=['Date', 'Open', 'Close']) 

    0 Date     Open Close 
    1 2016/11/22 07:00:00 47.47 47.48 
    2 2016/11/22 06:59:00 47.46 47.45 
    3 2016/11/22 06:58:00 47.38 47.38 

df.index = df.Date 

    Date     Date     Open Close 
    2016/11/22 07:00:00 2016/11/22 07:00:00 47.47 47.48 
    2016/11/22 06:59:00 2016/11/22 06:59:00 47.46 47.45 
    2016/11/22 06:58:00 2016/11/22 06:58:00 47.38 47.38 

ale potem mam dwie kolumny „data”, z których jeden jest indeksem, a drugi z nich jest oryginalna kolumna.

Czy istnieje sposób na ustawienie indeksu podczas gdy konwersji słownika na ramkę danych, bez nakładających się kolumn, takich jak poniżej?

 Date     Close  Open 
    2016/11/22 07:00:00 47.48  47.47 
    2016/11/22 06:59:00 47.45  47.46 
    2016/11/22 06:58:00 47.38  47.38 

Dziękujemy za przeczytanie tego! :)

Odpowiedz

3

Zastosowanie set_index:

df = pd.DataFrame(dictionary, columns=['Date', 'Open', 'Close']) 
df = df.set_index('Date')  
print (df) 
         Open Close 
Date        
2016/11/22 07:00:00 47.47 47.48 
2016/11/22 06:59:00 47.46 47.45 
2016/11/22 06:58:00 47.38 47.40 

Albo użyć inplace:

df = pd.DataFrame(dictionary, columns=['Date', 'Open', 'Close']) 
df.set_index('Date', inplace=True)  
print (df) 
         Open Close 
Date        
2016/11/22 07:00:00 47.47 47.48 
2016/11/22 06:59:00 47.46 47.45 
2016/11/22 06:58:00 47.38 47.40 

Innym możliwym rozwiązaniem odfiltrować dict przez Date klucza, a następnie ustawić wskaźnik przez dictionary['Date']:

df = pd.DataFrame({k: v for k, v in dictionary.items() if not k == 'Date'}, 
        index=dictionary['Date'], 
        columns=['Open','Close']) 
df.index.name = 'Date' 
print (df) 
         Open Close 
Date        
2016/11/22 07:00:00 47.47 47.48 
2016/11/22 06:59:00 47.46 47.45 
2016/11/22 06:58:00 47.38 47.40 
+0

Glad może Ci pomóc! Jeśli moja odpowiedź była pomocna, nie zapominaj o tym [zaakceptuj] (http://meta.stackexchange.com/a/5235/295067). Dzięki. – jezrael

+0

Dziękujemy za szczegółową odpowiedź! Czy mogę prosić o więcej wyjaśnień dla ostatniego rozwiązania? Nie jest mi łatwo zrozumieć, co jest w poleceniu DataFrame(). Co oznaczają k i v? Czy to jest podobne do rozumienia listy? – maynull

+0

tak, jest to zrozumienie dict, bardzo podobne do rozumienia listy, tylko wyjście jest innym lub zmienionym oryginalnym dict. – jezrael