说我的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日不在这个指数范围内?
答案 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;区分开的情况下。这是美国的标准日期格式。