2017-09-16 434 views
0

我有一个以String形式给出的日期。在工作to_datetime之后,它仍然有时间吗?使用pd.to_datetime将日期字符串转换为日期时删除时间戳

pickedDate = '2016-09-23' 
pickedDate = pandas.to_datetime(pickedDate,format='%Y-%m-%d') 
print(pickedDate) 

Console Log: 2016-09-23 00:00:00

我要的是:我有数据框与日期为指标。我想搜索与pickedDate相同的所有条目。

我想:

print(dataframe.loc[pickedDate]) 

但是这给了我:

KeyError: 'the label [2016-09-23 00:00:00] is not in the [index]'

数据框的样子(头):

DATE   INT   VALL      
2005-11-10 00:00:00.000  0 
2005-11-10 00:30:00.000  0 
2005-11-10 01:00:00.000  0 
2005-11-10 01:30:00.000  1 
2005-11-10 02:00:00.000  1 
+0

试试'df.loc ['2016-09-23']'? –

+0

即有效。但我需要的pickDate变量(其他地方作为日期时间)。我认为格式参数与我一样会删除时间? @cᴏʟᴅsᴘᴇᴇᴅ –

回答

0

鉴于你的指数(YYYY-MM-DD)的格式,这会工作:

df.index 
DatetimeIndex(['2005-11-10', '2005-11-10', '2005-11-10', '2005-11-10', 
       '2005-11-10'], 
       dtype='datetime64[ns]', name='DATE', freq=None) 

df.loc['2005-11-10'] 

        INT VALL 
DATE       
2005-11-10 00:00:00.000  0 
2005-11-10 00:30:00.000  0 
2005-11-10 01:00:00.000  0 
2005-11-10 01:30:00.000  1 
2005-11-10 02:00:00.000  1 

熊猫足够聪明,可以在访问日期时间索引时使用字符串。所以,你的情况,你会怎么做:

pickedDate = '2016-09-23' 
df.loc[pickedDate] 

工作,如果你的索引是一个字符串列表:

df.index 
Index(['2005-11-10', '2005-11-10', '2005-11-10', '2005-11-10', '2005-11-10'], dtype='object', name='DATE') 

Idf.loc['2005-11-10'] 
        INT VALL 
DATE       
2005-11-10 00:00:00.000  0 
2005-11-10 00:30:00.000  0 
2005-11-10 01:00:00.000  0 
2005-11-10 01:30:00.000  1 
2005-11-10 02:00:00.000  1 

但是,如果您使用的是带有日期的指数,我建议将它们转换为日期时间为John Zwinck mentioned。一旦你转换,你目前的方法将工作。

+0

您的替代部分无法使用.date(),它给了我'KeyError:'标签[2016-09-23]不在[index]' –

+1

@ M.Meooa这意味着您的索引实际上是一个列表的字符串。 –

+0

啊..去吧。谢谢 –

0

你的问题是,你的数据帧索引包含字符串。所以,你可以用字符串搜索一下:

dataframe.loc[str(pickedDate.date())] 

或者,您可以更改索引D型:

dataframe.index = pd.to_datetime(dataframe.index) 
+0

不一定。这也适用于日期时间索引。 –

相关问题