2013-05-29 46 views
16

我正在寻找一种将DataFrame转换为TimeSeries而不拆分索引和值列的方法。有任何想法吗?谢谢。如何将熊猫数据框转换为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

你想用它做什么?例如什么是你想要的输出 – Jeff

+0

pd.TimeSeries对象 – morgan

+1

你的数据是2-d,你想如何使它1-d?例如以单列为例,或者在缩减操作中对所有列应用函数,或者连接数据 – Jeff

回答

9

这是一个可能性

[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

我刚看到这个答案。如果数据框只有一列,该怎么办? 'unstack'会返回一个包含两级索引的系列,并且'pd.Series(df)'似乎不起作用(它的功能实际上很奇怪,因为它将列标题拆分为字符并将系列填入副本的分裂) –

+1

我得到它的唯一方法是使用'df [df.columns [0]]',但是这样做有点不自然。 –

14

我知道这是迟到了这里的游戏,但几个点。

是否将DataFrame视为TimeSeries是索引的类型。在你的情况下,你的索引已经是TimeSeries,所以你很好走。有关所有酷分片的更多信息,可以使用pd.timeseries索引,请看http://pandas.pydata.org/pandas-docs/stable/timeseries.html#datetime-indexing

现在,其他人可能会到达此处,因为他们有一列'DateTime'他们想要创建索引,其中案例答案很简单

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

@Cristian Ciupitu运行你的建议后,然后键入(ts)它仍然打印pandas.core.frame.DataFrame。我相信我们想要的是我们正在寻找的是时间序列对象,对吧?据McKinney说,Wes。用于数据分析的Python:用Pandas,NumPy和IPython修改数据(Kindle Location 6861)。 O'Reilly媒体。 Kindle版。 ...当我们运行ts.index时,它应该输出:'pandas.tseries.index.DatetimeIndex'。 –

+0

@RyanChase,我不是这个答案的作者。 –

+0

@EngineeredE \t 运行您的建议后,然后键入(ts)它仍然打印pandas.core.frame.DataFrame。我相信我们想要的是我们正在寻找的是时间序列对象,对吧?据McKinney说,Wes。用于数据分析的Python:用Pandas,NumPy和IPython修改数据(Kindle Location 6861)。 O'Reilly媒体。 Kindle版。 ...当我们运行ts.index时,它应该输出:'pandas.tseries.index.DatetimeIndex' –