使用to_datetime()转换为datetime64格式

时间:2013-07-17 16:54:38

标签: python datetime pandas dataframe

我正在尝试将某些日期时间数据转换为pandas.to_datetime()格式。它不起作用,df['Time']的类型为Object。哪里错了?

请注意,我已附上我的时间档案。

我的代码

import pandas as pd
import numpy as np
from datetime import datetime

f = open('time','r')
lines = f.readlines()

t = []
for line in lines:
    time = line.split()[1][-20:]
    time2 = time[:11] + ' ' +time[12:21]
    t.append(time2)



df = pd.DataFrame(t)
df.columns = ['Time']
df['Time'] = pd.to_datetime(df['Time'])

print df['Time'] 


Name: Time, Length: 16136, dtype: object

请找到附加时间数据文件here

1 个答案:

答案 0 :(得分:3)

文件time包含一些无效数据。

例如,第8323行包含8322 "5/Jul/2013::8:25:18 0530", 这与普通行8321 "15/Jul/2013:18:25:18 +0530"不同。

8321 "15/Jul/2013:18:25:18 +0530"
8322 "5/Jul/2013::8:25:18  0530"

对于正常行,time2变为15/Jul/2013 18:25:18,但对于无效行"5/Jul/2013::8:25:18

15/Jul/2013 18:25:18
"5/Jul/2013::8:25:18

导致某些行被解析为日期时间,而某些行则没有;数据被强制转换为对象(包含日期时间和字符串)。

>>> pd.Series(pd.to_datetime(['15/Jul/2013 18:25:18', '15/Jul/2013 18:25:18']))
0   2013-07-15 18:25:18
1   2013-07-15 18:25:18
dtype: datetime64[ns]

>>> pd.Series(pd.to_datetime(['15/Jul/2013 18:25:18', '*5/Jul/2013 18:25:18']))
0    15/Jul/2013 18:25:18
1    *5/Jul/2013 18:25:18
dtype: object

如果您只从文件中获取前5个数据(具有正确的日期格式),您将获得预期的结果。

...
df = pd.DataFrame(t[:5])
df.columns = ['Time']
df['Time'] = pd.to_datetime(df['Time'])

以上代码产量:

0   2013-07-15 00:00:12
1   2013-07-15 00:00:18
2   2013-07-15 00:00:23
3   2013-07-15 00:00:27
4   2013-07-15 00:00:29
Name: Time, dtype: datetime64[ns]

<强>更新

添加了一个小例子,其中显示了object的dtype原因,而不是datetime