我有一个包含各种属性的数据框,包括一个日期时间列。我想提取一个属性列作为由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())
答案 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
您可以确认s
是Series
:
In [2]: isinstance(s, pd.Series)
Out[2]: True