Pandas to_datetime函数给出了不稳定的输出

时间:2018-04-15 00:01:33

标签: python python-3.x pandas datetime

我的数据框有一个'Date'列,类型为object,但我想将其转换为pandas时间序列。所以我使用的是pd.to_datetime函数。此函数正在转换数据类型,但输出不稳定。

代码:

x1['TS'] = pd.to_datetime(x1['Date'])       
x1['Day'] = x1['TS'].dt.dayofweek      
x1[['Date', 'TS', 'Day']].iloc[::1430,:]

现在请仔细注意输出并查看Date和TS列。它应该是相同的,但在某些情况下,它是不同的。

输出:

        Date            TS     Day
0       01-12-2017  2017-01-12  3
1430    01-12-2017  2017-01-12  3
2860    02-12-2017  2017-02-12  6
4290    03-12-2017  2017-03-12  6
5720    04-12-2017  2017-04-12  2
7150    05-12-2017  2017-05-12  4
8580    07-12-2017  2017-07-12  2
10010   08-12-2017  2017-08-12  5
11440   09-12-2017  2017-09-12  1
12870   09-12-2017  2017-09-12  1
14300   10-12-2017  2017-10-12  3
15730   11-12-2017  2017-11-12  6
17160   12-12-2017  2017-12-12  1
18590   13-12-2017  2017-12-13  2
20020   14-12-2017  2017-12-14  3
21450   15-12-2017  2017-12-15  4
22880   16-12-2017  2017-12-16  5
24310   17-12-2017  2017-12-17  6
25740   18-12-2017  2017-12-18  0
27170   19-12-2017  2017-12-19  1
28600   20-12-2017  2017-12-20  2
30030   21-12-2017  2017-12-21  3
31460   22-12-2017  2017-12-22  4
32890   23-12-2017  2017-12-23  5
34320   24-12-2017  2017-12-24  6
35750   25-12-2017  2017-12-25  0
37180   26-12-2017  2017-12-26  1
38610   27-12-2017  2017-12-27  2
40040   28-12-2017  2017-12-28  3
41470   29-12-2017  2017-12-29  4
42900   30-12-2017  2017-12-30  5
44330   31-12-2017  2017-12-31  6
45760   01-01-2018  2018-01-01  0
47190   02-01-2018  2018-02-01  3
48620   03-01-2018  2018-03-01  3
50050   04-01-2018  2018-04-01  6
51480   05-01-2018  2018-05-01  1
52910   06-01-2018  2018-06-01  4
54340   07-01-2018  2018-07-01  6
55770   08-01-2018  2018-08-01  2
57200   09-01-2018  2018-09-01  5
58630   10-01-2018  2018-10-01  0
60060   11-01-2018  2018-11-01  3
61490   12-01-2018  2018-12-01  5
62920   13-01-2018  2018-01-13  5
64350   14-01-2018  2018-01-14  6
65780   15-01-2018  2018-01-15  0
67210   16-01-2018  2018-01-16  1

2 个答案:

答案 0 :(得分:3)

糟糕!看起来您的日期从第一天开始。你必须告诉熊猫相应地处理它。调用dayfirst时,将True标记设置为to_datetime

x1['TS'] = pd.to_datetime(x1['Date'], dayfirst=True)  

答案 1 :(得分:3)

当您在没有指定格式的情况下传入时间时,Pandas会尝试以天真的方式猜测格式。假设您的一天实际上是您的月份,但是当它看到它是第13个月时,意识到不能是月份列和切换。

以下情况应该有效,但我更喜欢@cᴏʟᴅsᴘᴇᴇᴅ的解决方案,因为只是举起dayfirst标志会更简单。

要解决此问题,请将当前格式提供给to_datetime函数。

文档提供了以下示例,您可以根据自己的情况进行修改:

pd.to_datetime('13000101', format='%Y%m%d', errors='ignore')

请在此处查看详细信息:https://pandas.pydata.org/pandas-docs/stable/generated/pandas.to_datetime.html

时间格式约定(%Y表示等等)在这里:https://docs.python.org/3.2/library/time.html