2013-05-29 22 views
16

Sto cercando un modo per convertire un DataFrame in un TimeSeries senza dividere le colonne indice e valore. Qualche idea? Grazie.Come convertire un DataFrame panda in un TimeSeries?

In [20]: import pandas as pd 

In [21]: import numpy as np 

In [22]: dates = pd.date_range('20130101',periods=6) 

In [23]: df = pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD')) 

In [24]: df 
Out[24]: 
        A   B   C   D 
2013-01-01 -0.119230 1.892838 0.843414 -0.482739 
2013-01-02 1.204884 -0.942299 -0.521808 0.446309 
2013-01-03 1.899832 0.460871 -1.491727 -0.647614 
2013-01-04 1.126043 0.818145 0.159674 -1.490958 
2013-01-05 0.113360 0.190421 -0.618656 0.976943 
2013-01-06 -0.537863 -0.078802 0.197864 -1.414924 

In [25]: pd.Series(df) 
Out[25]: 
0 A 
1 B 
2 C 
3 D 
dtype: object 
+1

e cosa vuoi fare con esso? per esempio. qual è l'output desiderato – Jeff

+0

pd.TimeSeries oggetto – morgan

+1

i dati sono 2-d, come si desidera renderlo 1-d? per esempio. prendi una singola colonna per esempio, o applica una funzione su tutte le colonne in un'operazione di riduzione, o concatena i dati – Jeff

risposta

9

Ecco una possibilità

[3]: df 

Out[3]: 
        A   B   C   D 
2013-01-01 -0.024362 0.712035 -0.913923 0.755276 
2013-01-02 2.624298 0.285546 0.142265 -0.047871 
2013-01-03 1.315157 -0.333630 0.398759 -1.034859 
2013-01-04 0.713141 -0.109539 0.263706 -0.588048 
2013-01-05 -1.172163 -1.387645 -0.171854 -0.458660 
2013-01-06 -0.192586 0.480023 -0.530907 -0.872709 

In [4]: df.unstack() 
Out[4]: 
A 2013-01-01 -0.024362 
    2013-01-02 2.624298 
    2013-01-03 1.315157 
    2013-01-04 0.713141 
    2013-01-05 -1.172163 
    2013-01-06 -0.192586 
B 2013-01-01 0.712035 
    2013-01-02 0.285546 
    2013-01-03 -0.333630 
    2013-01-04 -0.109539 
    2013-01-05 -1.387645 
    2013-01-06 0.480023 
C 2013-01-01 -0.913923 
    2013-01-02 0.142265 
    2013-01-03 0.398759 
    2013-01-04 0.263706 
    2013-01-05 -0.171854 
    2013-01-06 -0.530907 
D 2013-01-01 0.755276 
    2013-01-02 -0.047871 
    2013-01-03 -1.034859 
    2013-01-04 -0.588048 
    2013-01-05 -0.458660 
    2013-01-06 -0.872709 
dtype: float64 
+1

Ho appena visto questa risposta. Cosa succede se il dataframe ha solo una colonna? 'unstack' restituirebbe una serie con un indice a due livelli, e' pd.Series (df) 'non sembra funzionare (è davvero strano ciò che fa, poiché divide il titolo della colonna in caratteri e popola la serie con copie di questa suddivisione) –

+1

L'unico modo per farlo funzionare è con 'df [df.columns [0]]' ma questo è un po 'innaturale nel fare una conversione. –

14

So che questo è in ritardo al gioco qui, ma alcuni punti.

Se uno DataFrame è considerato un TimeSeries è il tipo di indice. Nel tuo caso, il tuo indice è già un TimeSeries, quindi sei a posto. Per ulteriori informazioni su tutte le affettazioni interessanti che è possibile fare con l'indice pd.timeseries, dare un'occhiata a http://pandas.pydata.org/pandas-docs/stable/timeseries.html#datetime-indexing

Ora, altri potrebbero arrivare qui perché hanno una colonna 'DateTime' che vogliono fare un indice, in cui caso la risposta è semplice

ts = df.set_index('DateTime') 
+0

@Cristian Ciupitu dopo aver eseguito ciò che suggerisci, quindi digita (ts) stampa ancora pandas.core.frame.DataFrame. Credo che quello che vogliamo è che stiamo cercando è un oggetto di timeseries, giusto? Secondo McKinney, Wes. Python for Data Analysis: Wrangling di dati con Pandas, NumPy e IPython (posizione Kindle 6861). O'Reilly Media. Edizione Kindle. ... quando eseguiamo ts.index, dovrebbe stampare: 'pandas.tseries.index.DatetimeIndex'. –

+0

@RyanChase, non sono l'autore di questa risposta. –

+0

@EngineeringE \t dopo aver eseguito ciò che suggerisci, quindi digitare (ts) stampa ancora pandas.core.frame.DataFrame. Credo che quello che vogliamo è che stiamo cercando è un oggetto di timeseries, giusto? Secondo McKinney, Wes. Python for Data Analysis: Wrangling di dati con Pandas, NumPy e IPython (posizione Kindle 6861). O'Reilly Media. Edizione Kindle. ... quando eseguiamo ts.index, dovrebbe stampare: 'pandas.tseries.index.DatetimeIndex' –

Problemi correlati