如何在python中导入日期

时间:2015-06-24 17:45:11

标签: python date pandas time-series

我有一个包含列(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中导入日期的方法?

非常感谢

2 个答案:

答案 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'