2

我正在尝试将一些日期时间数据转换为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

请在此处找到附加时间数据文件

4

1 回答 1

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]

更新

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

于 2013-07-17T17:51:30.707 回答