我想用一个包含 pd.date_range 的变量对我的 pandas 数据框进行切片,但它正在为我的数据返回 Nan

Posted

技术标签:

【中文标题】我想用一个包含 pd.date_range 的变量对我的 pandas 数据框进行切片,但它正在为我的数据返回 Nan【英文标题】:I want to slice my pandas data frame with a variable that contains a pd.date_range, but it is returning Nan for my data 【发布时间】:2017-01-12 06:52:05 【问题描述】:

我已从 yahoo Finance 加载数据,其中包括标题日期、开盘价、最高价、最低价、收盘价、成交量、调整收盘价。日期是我的数据框索引,我希望能够使用索引(日期)对这些数据进行排序。

变量月份将给出我需要的日期数组,它会打印出来。问题是我的数据得到了 Nan 值。

from pandas_datareader import data as dreader
import pandas as pd

df = pd.read_csv("cde_data.csv",index_col='Date')
month = pd.date_range('2010-08-01','2016-08-01',freq='m')

print(df.ix[month.values])

这是我得到的输出(我只发布了前 4 行以节省空间)

            Open  High  Low  Close  Volume  Adj Close
Date
2010-08-31   NaN   NaN  NaN    NaN     NaN        NaN

2010-09-30   NaN   NaN  NaN    NaN     NaN        NaN

2010-10-31   NaN   NaN  NaN    NaN     NaN        NaN

2010-11-30   NaN   NaN  NaN    NaN     NaN        NaN

这是 df.head()

              Open    High     Low   Close  Volume   Adj Close
Date
1990-04-12  26.875  26.875  26.625  26.625    6100  250.576036
1990-04-16  26.500  26.750  26.375  26.750     500  251.752449
1990-04-17  26.750  26.875  26.750  26.875    2300  252.928863
1990-04-18  26.875  26.875  26.500  26.625    3500  250.576036
1990-04-19  26.500  26.750  26.500  26.750     700  251.752449

按任意键继续。 . .

【问题讨论】:

提供 df.head() 以获得帮助 我添加了 df,head month 包含“月底”日期。您确定在数据框中有对应于这些日期的值吗?当我尝试匹配索引时,df.ix[month] 工作正常。 是的,这些值是存在的,我什至将频率切换到天,仍然得到 Nan @ayhan 是对的,您的月份变量中有日期不在 data.frame df 的索引中。此外,如果您在当月的第一天之后,那么您可能想要使用month = pd.date_range('2010-08-01','2016-08-01',freq='MS'),而不是month = pd.date_range('2010-08-01','2016-08-01',freq='m')。但即便如此,您仍然有像 1 月 1 日 这样的日期,但您没有数据,因为这是一年中的第一天,市场关闭。 【参考方案1】:

您的索引不是日期时间类型而是对象。使用前转换:

df = df.reset_index()
df.Date = pd.to_datetime(df.Date)
df = df.set_index('Date')

【讨论】:

以上是关于我想用一个包含 pd.date_range 的变量对我的 pandas 数据框进行切片,但它正在为我的数据返回 Nan的主要内容,如果未能解决你的问题,请参考以下文章

pandas-13 时间序列操作方法pd.date_range()

具有特定时间范围的 Pandas date_range

如何在 pandas date_range 方法中包含结束日期?

为什么date_range的结果与索引DataFrame Pandas日期的[]不同?

pandas常用操作(随时更新)

格式化日期时间标签以包含熊猫图的工作日名称