从Pandas DataFrame创建时间序列

时间:2017-04-30 16:50:26

标签: python pandas indexing time-series

我有一个包含各种属性的数据框,包括一个日期时间列。我想提取一个属性列作为由datetime列索引的时间系列。这似乎非常简单,我可以使用随机值构建时间序列,因为所有的pandas文档都显示..但是当我从数据帧中这样做时,我的属性值全部转换为NaN。

这是一个类似的例子。

df = pd.DataFrame({'a': [0,1], 'date':[pd.to_datetime('2017-04-01'),
                                       pd.to_datetime('2017-04-02')]})
s = pd.Series(df.a, index=df.date)

在这种情况下,系列将具有正确的时间序列索引,但所有值都将为NaN。

我可以分两步完成系列,如下所示,但我不明白为什么要这样做。

s = pd.Series(df.a)
s.index = df.date

我错过了什么?我认为它与系列参考有关,但不了解为什么这些值会转到NaN。

我也可以通过复制索引列来使其工作。

s = pd.Series(df.a, df.date.copy())

1 个答案:

答案 0 :(得分:5)

问题是pd.Series()正在尝试使用index中指定的值来从数据框中选择值,但数据框中的日期值不会出现在索引中。

您可以将索引设置为日期列,然后选择所需的一个数据列。这将返回一个系列,其中日期为索引

import pandas as pd

df = pd.DataFrame({'a': [0,1], 'date':[pd.to_datetime('2017-04-01'),
                                       pd.to_datetime('2017-04-02')]})    
s = df.set_index('date')['a']

检查s给出:

In [1]: s
Out[1]: 
date
2017-04-01    0
2017-04-02    1
Name: a, dtype: int64

您可以确认sSeries

In [2]: isinstance(s, pd.Series)
Out[2]: True