我有一个包含列(dtype:object)的pandas数据框,其中日期表示为:
0 2014-11-07 14:08:00
1 2014-10-18 16:53:00
2 2014-10-27 11:57:00
3 2014-10-27 11:57:00
4 2014-10-08 16:35:00
5 2014-10-24 16:36:00
6 2014-11-06 15:34:00
7 2014-11-11 10:30:00
8 2014-10-31 13:20:00
9 2014-11-07 13:15:00
10 2014-09-20 14:36:00
11 2014-11-07 17:21:00
12 2014-09-23 08:53:00
13 2014-11-05 09:37:00
14 2014-10-26 18:48:00
...
Name: ts_placed, Length: 13655, dtype: object
我想要做的是将列作为日期读取,然后根据周分割数据集。
我试图做的是:
data["ts_placed"] = pd.to_datetime(data.ts_placed)
data.sort('ts_placed')
它不起作用
TypeError: unorderable types: str() > datetime.datetime()
当这些表示为对象时,是否有人知道在pythons中导入日期的方法?
非常感谢
答案 0 :(得分:1)
使用Series.dt
方法。
对于该日期,您可以使用Series.dt.date
:
data['Date Column'] = data['Date Column'].dt.date
本周,您可以使用Series.dt.weekofyear
:
data['Week'] = data['Date Column'].dt.weekofyear
然后您将根据周创建新数据:
weekdata = data[data['Week'] == week number]
sort
现在也应该有效。
答案 1 :(得分:0)
看起来to_datetime
不适用于系列。看起来像矢量化版本:
data['ts_placed'] = [pd.to_datetime(strD) for strD in data.ts_placed]
data.sort('ts_placed')
更新希望我接受的答案与评论中的计算解决方案相匹配。因此,如果运行to_datetime的矢量化版本,则如果无法转换所有字符串,则不会将矢量转换为datatime对象。上面的版本将转换那些可以转换的版本。在任何一种情况下,都应检查是否所有值都已转换。
使用矢量化版本可以使用:
进行检查data.ts_placed = pd.to_datetime(data.ts_placed)
if(not isinstance(data.ts_placed[0], pd.lib.Timestamp)):
print 'Dates not converted correctly'
使用上述手动矢量化版本:
if(sum(not isinstance(strD, datetime.datetime) for strD in data.ts_placed) > 0):
print 'Dates not converted correctly'