Pandas:从包含pd.datetime

时间:2017-10-09 14:24:54

标签: python-3.x pandas

说我的df如下:

a=pd.DataFrame([[1,3]]*3,columns=['a','b'],index=['5/4/2017','5/6/2017','5/8/2017'])    
a.index=pd.to_datetime(a.index,format='%m/%d/%Y')

df.index的类型现在是

<class 'pandas.core.indexes.datetimes.DatetimeIndex'>

当我们尝试根据pd.datetime类型的索引调用一行数据时,可以根据日期的字符串格式调用该值,而不是输入datetime对象。在上面的例子中,如果我想在5/4/2017上调用一行数据,我可以简单地将日期的字符串格式输入到.loc,如下所示:

print(a.loc['5/4/2017'])

我们不需要输入日期时间对象

print(a.loc[pd.datetime(2017,5,4)]

我的问题是,当根据日期的字符串格式从.loc调用数据时,pandas如何知道我的日期字符串格式是否遵循m-d-y或d-m-y或其他组合?在上面的例子中,我使用了a.loc [&#39; 5/4/2017&#39;]并成功返回了值。为什么它认为这可能意味着4月5日不在这个指数范围内?

1 个答案:

答案 0 :(得分:1)

这是我最好的镜头:

Pandas有一个名为pandas._guess_datetime_format的内部函数。这是传递'infer_datetime_format&#39; pandas.to_datetime的参数。它需要一个字符串并运行一个&#34; guess&#34;格式并返回其关于如何将该字符串转换为日期时间对象的最佳猜测。

使用字符串引用日期时间索引可能会使用类似的方法。

我做了一些测试,看看在你描述的情况下会发生什么 - 数据框包含日期2017-04-05和2017-05-04。

在这种情况下,以下内容:

df.loc['5/4/2017']

返回2017年5月4日的数据

df.loc['4/5/2017']

返回2017年4月5日的数据。

尝试在原始矩阵中引用4/5/2017给出了#34;不在[index]&#34;错误。

基于此,我的结论是pandas._guess_datetime_format默认为&#34;%m /%d /%Y&#34;格式在无法与&#34;%d /%m /%Y&#34;区分开的情况下。这是美国的标准日期格式。