【问题标题】:How to convert a pandas DataFrame into a TimeSeries?如何将 pandas DataFrame 转换为 TimeSeries?
【发布时间】:2013-05-25 06:01:27
【问题描述】:

我正在寻找一种将 DataFrame 转换为 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

【问题讨论】:

  • 你想用它做什么?例如你想要的输出是什么
  • 你的数据是二维的,你想怎么把它变成一维的?例如以单个列为例,或者在归约操作中对所有列应用函数,或者连接数据
  • 请发帖df.info()

标签: python pandas time-series


【解决方案1】:

这是一种可能性

[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

【讨论】:

  • 我刚看到这个答案。如果数据框只有一列怎么办? unstack 将返回一个具有两级索引的系列,而 pd.Series(df) 似乎不起作用(它的作用真的很奇怪,因为它将列标题拆分为字符并使用此拆分的副本填充系列)
  • 我让它工作的唯一方法是使用df[df.columns[0]],但这有点不自然。
【解决方案2】:

我知道这对游戏来说已经晚了,但有几点。

DataFrame 是否被视为TimeSeries 是索引的类型。在您的情况下,您的索引已经是TimeSeries,所以您可以开始了。有关您可以使用 pd.timeseries 索引执行的所有酷切片的更多信息,请查看http://pandas.pydata.org/pandas-docs/stable/timeseries.html#datetime-indexing

现在,其他人可能会到达这里,因为他们有一个列 'DateTime' 想要创建索引,在这种情况下,答案很简单

ts = df.set_index('DateTime')

【讨论】:

  • @Cristian Ciupitu 在运行您的建议后,然后键入(ts)它仍然会打印 pandas.core.frame.DataFrame。我相信我们想要的是一个我们正在寻找的是一个时间序列对象,对吧?根据麦金尼的说法,韦斯。用于数据分析的 Python:使用 Pandas、NumPy 和 IPython 进行数据处理(Kindle 位置 6861)。奥莱利媒体。 Kindle版。 ...当我们运行 ts.index 时,它应该打印:'pandas.tseries.index.DatetimeIndex'。
  • @RyanChase,我不是这个答案的作者。
  • @EngineeredE 在运行您的建议后,然后键入(ts)它仍然会打印 pandas.core.frame.DataFrame。我相信我们想要的是一个我们正在寻找的是一个时间序列对象,对吧?根据麦金尼的说法,韦斯。用于数据分析的 Python:使用 Pandas、NumPy 和 IPython 进行数据处理(Kindle 位置 6861)。奥莱利媒体。 Kindle版。 ...当我们运行 ts.index 时,它应该打印:'pandas.tseries.index.DatetimeIndex'
猜你喜欢
  • 2017-09-20
  • 2022-09-29
  • 2017-03-17
  • 2017-03-23
  • 2017-07-14
  • 2021-06-07
  • 2019-06-04
  • 2017-04-13
  • 2021-03-29
相关资源
最近更新 更多