我想用一个包含 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,headmonth
包含“月底”日期。您确定在数据框中有对应于这些日期的值吗?当我尝试匹配索引时,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 方法中包含结束日期?