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)
问题是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)