从Pandas DataFrame创建时间序列

Ren*_*née 4 python indexing time-series pandas

我有一个具有各种属性的数据框,包括一个datetime列。我想提取属性列之一作为由datetime列索引的时间序列。这似乎非常简单,而且我可以用所有熊猫文档所示的随机值构造时间序列。但是当我从数据框中这样做时,我的属性值都将转换为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)
Run Code Online (Sandbox Code Playgroud)

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

我可以按照以下两个步骤来做系列,但是我不明白为什么要这样做。

s = pd.Series(df.a)
s.index = df.date
Run Code Online (Sandbox Code Playgroud)

我想念什么?我认为它与系列引用有关,但根本不理解为什么值会归入NaN。

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

s = pd.Series(df.a, df.date.copy())
Run Code Online (Sandbox Code Playgroud)

Cra*_*aig 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']
Run Code Online (Sandbox Code Playgroud)

检查s得出:

In [1]: s
Out[1]: 
date
2017-04-01    0
2017-04-02    1
Name: a, dtype: int64
Run Code Online (Sandbox Code Playgroud)

您可以确认这s是一个Series

In [2]: isinstance(s, pd.Series)
Out[2]: True
Run Code Online (Sandbox Code Playgroud)