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