我对pandas to_datetime函数和pandas中的日期时间有一些困难。具体来说,to_datetime在应用于pandas系列时无声地失败,没有做任何事情,我必须单独显式迭代每个值以使函数正常工作,即使(至少根据this SO question)两者都应该同样的工作。
In [81]: np.__version__
Out[81]: '1.6.1'
In [82]: pd.__version__
Out[82]: '0.12.0'
In [83]: a[0:10]
Out[83]:
0 8/31/2013 14:57:00
1 8/31/2013 13:55:00
2 8/31/2013 15:45:00
3 9/1/2013 13:26:00
4 9/1/2013 13:56:00
5 9/2/2013 13:55:00
6 9/3/2013 13:33:00
7 9/3/2013 14:11:00
8 9/3/2013 14:35:00
9 9/4/2013 14:28:00
Name: date_time, dtype: object
In [84]: a[0]
Out[84]: '8/31/2013 14:57:00'
In [85]: a=pd.to_datetime(a)
In [86]: a[0]
Out[86]: '8/31/2013 14:57:00'
In [87]: a=[pd.to_datetime(date) for date in a]
In [88]: a[0]
Out[88]: Timestamp('2013-08-31 14:57:00', tz=None)
对此为何的任何想法?我似乎总体上遇到了这些数据并且没有正确解析date_time列的问题,我怀疑它可能与此失败有关。
谢谢,
戴夫
答案 0 :(得分:4)
这已在新熊猫中修复,默认错误kwarg是'加注'而不是'忽略'。
新的行为是:
In [21]: pd.to_datetime(dates) # same as errors='raise'
...
ValueError: Given date string not likely a datetime.
In [22]: pd.to_datetime(dates, errors="ignore") # the original problem
Out[22]:
0 1/1/2014
1 A
dtype: object
也就是说,to_datetime
不再无声地失败!
旧答案保留在下面......
正如DaveA指出的那样(在检查我的评论之后),默认情况下,如果出现问题,to_datetime会无声地失败并返回最初传递的内容:
In [1]: dates = pd.Series(['1/1/2014', 'A'])
In [2]: pd.to_datetime(dates) # doesn't even convert first date
Out[2]:
0 1/1/2014
1 A
dtype: object
In [3]: pd.to_datetime(dates, errors='raise')
...
ValueError: Given date string not likely a datetime.
注意:此参数在较旧的pandas版本中曾是coerce=True
。
In [4]: pd.to_datetime(dates, errors='coerce')
Out[4]:
0 2014-01-01
1 NaT
dtype: datetime64[ns]
此行为to_datetime
is discussed in the timeseries section of the docs。
通过选中isnull
:
In [5]: dates[pd.isnull(pd.to_datetime(dates, errors='coerce'))]
Out[5]:
1 A
dtype: object
答案 1 :(得分:1)
Pandas.to_datetime函数无提示失败,如果失败则只返回原始值。一个单一格式错误的输入可能导致整个过程无声地失败。