2013-05-29 38 views
16

Tôi đang tìm cách chuyển đổi một DataFrame thành một TimeSeries mà không chia tách các cột chỉ mục và giá trị. Ý tưởng nào? Cảm ơn.Làm thế nào để chuyển đổi một DataFrame gấu trúc thành một 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

và bạn muốn làm gì với nó? ví dụ. đầu ra mong muốn của bạn là gì – Jeff

+0

đối tượng pd.TimeSeries – morgan

+1

dữ liệu của bạn là 2-d, bạn muốn làm cho nó 1-d như thế nào? ví dụ. lấy một cột ví dụ, hoặc áp dụng một chức năng trên tất cả các cột trong một hoạt động giảm, hoặc nối dữ liệu – Jeff

Trả lời

9

Đây là một khả năng

[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

Tôi vừa thấy câu trả lời này. Điều gì xảy ra nếu khung dữ liệu chỉ có một cột? 'unstack' sẽ trả về một chuỗi với một chỉ mục hai cấp, và' pd.Series (df) 'dường như không hoạt động (nó thực sự kỳ quặc những gì nó làm, vì nó chia tách tiêu đề cột thành các ký tự và populates Series với các bản sao của việc chia tách này) –

+1

Cách duy nhất tôi nhận được nó để làm việc là với 'df [df.columns [0]]' nhưng đó là một chút không tự nhiên khi thực hiện một chuyển đổi. –

14

Tôi biết đây là muộn để các trò chơi ở đây nhưng một vài điểm.

Có hay không DataFrame được coi là TimeSeries là loại chỉ mục. Trong trường hợp của bạn, chỉ mục của bạn đã là TimeSeries, vì vậy bạn nên làm tốt. Để biết thêm thông tin về tất cả các lát cắt mát mẻ bạn có thể làm với chỉ mục pd.timeseries, hãy xem http://pandas.pydata.org/pandas-docs/stable/timeseries.html#datetime-indexing

Bây giờ, những người khác có thể đến đây vì họ có cột 'DateTime' rằng họ muốn tạo chỉ mục, trường hợp câu trả lời là đơn giản

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

@Cristian Ciupitu sau khi chạy những gì bạn đề xuất, sau đó nhập (ts) nó vẫn in pandas.core.frame.DataFrame. Tôi tin rằng những gì chúng tôi muốn là một chúng tôi đang tìm kiếm là một đối tượng timeseries, phải không? Theo McKinney, Wes. Python cho phân tích dữ liệu: Data Wrangling với Pandas, NumPy, và IPython (Kindle Location 6861). O'Reilly Media. Kindle Edition. ... khi chúng ta chạy ts.index, nó sẽ in: 'pandas.tseries.index.DatetimeIndex'. –

+0

@RyanChase, tôi không phải là tác giả của câu trả lời này. –

+0

@EngineeredE \t sau khi chạy những gì bạn đề xuất, sau đó nhập (ts) nó vẫn in pandas.core.frame.DataFrame. Tôi tin rằng những gì chúng tôi muốn là một chúng tôi đang tìm kiếm là một đối tượng timeseries, phải không? Theo McKinney, Wes. Python cho phân tích dữ liệu: Data Wrangling với Pandas, NumPy, và IPython (Kindle Location 6861). O'Reilly Media. Kindle Edition. ... khi chúng ta chạy ts.index, nó sẽ in: 'pandas.tseries.index.DatetimeIndex' –

Các vấn đề liên quan