2013-05-29 39 views
16

DataFrame'i endeks ve değer sütunlarını ayırmadan bir TimeSeries'e dönüştürmenin bir yolunu arıyorum. Herhangi bir fikir? Teşekkürler.Nasıl panda DataFrame bir TimeSeries dönüştürmek için?

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

ve onunla ne yapmak istersiniz? Örneğin. İstediğiniz çıktı nedir – Jeff

+0

pd.TimeSeries nesnesi – morgan

+1

verileriniz 2-d, nasıl 1-d yapmak istersiniz? Örneğin. Örneğin, tek bir sütunu ele geçirin ya da bir küçültme işleminde tüm sütunlara bir işlev uygulayın ya da – Jeff

cevap

9

İşte bir ihtimal bu burada oyun ama birkaç noktaya geç, biliyorum

[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

Bu cevabı daha yeni gördüm. Veri çerçevesinin yalnızca bir sütunu varsa ne olur? "taramalı" iki seviyeli bir diziyle bir dizi döndürür ve "pd.Series (df)" işe yaramaz gibi görünmüyor (sütun başlığı karakterlere bölündüğü ve dizileri kopyalarla doldurduğu için gerçekten ne yaptığı Bu bölme) –

+1

Çalışmaya başladığım tek yol, df [df.columns [0]] 'dır ancak bu bir dönüşüm yapmanın doğal olmayan bir parçasıdır. –

14

olduğunu.

DataFrame'un TimeSeries türünde bir endeks olduğu kabul edilir. Durumunuzda, endeksiniz zaten bir TimeSeries, bu yüzden gitmekte fayda var. Bir pd.timeseries endeksi ile yapabileceğiniz tüm serin dilimleme hakkında daha fazla bilgi için,

'a bakın. Diğerleri, bir dizin oluşturmak istedikleri bir sütun 'DateTime' olduğu için buraya gelebilirler. Buradaki sorunun cevabı

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

@Cristian Ciupitu önerilerinizi çalıştırdıktan sonra, daha sonra pandas.core.frame.DataFrame'i yazdıran (ts) yazın. İstediğimize inanıyorum, aradığımız bir zaman çizelgesi nesnesi değil mi? McKinney'e göre, Wes. Veri Analizi için Python: Pandalar, NumPy ve IPython ile Veri Düzenleme (Kindle Location 6861). O'Reilly Medya. Kindle Sürümü. ... ts.index'i çalıştırdığımızda, şunu yazmalı: 'pandas.tseries.index.DatetimeIndex'. –

+0

@RyanChase, bu cevabın yazarı değilim. –

+0

@EngineeredE \t Önerilerinizi çalıştırdıktan sonra, (ts) yazıp pandas.core.frame.DataFrame dosyasını yazdırmaya devam edin. İstediğimize inanıyorum, aradığımız bir zaman çizelgesi nesnesi değil mi? McKinney'e göre, Wes. Veri Analizi için Python: Pandalar, NumPy ve IPython ile Veri Düzenleme (Kindle Location 6861). O'Reilly Medya. Kindle Sürümü. ... ts.index'i çalıştırdığımızda, şunu yazmalı: 'pandas.tseries.index.DatetimeIndex' –

İlgili konular