2016-09-23 192 views
1

我有一个timestamp的列,其中时间戳是按以下格式大熊猫:提取日期和时间从时间戳

2016-06-16T21:35:17.098+01:00 

我想从中提取的日期和时间。我做了以下几点:

import datetime as dt 

df['timestamp'] = df['timestamp'].apply(lambda x : pd.to_datetime(str(x))) 

df['dates'] = df['timestamp'].dt.date 

这工作了一段时间。但突然间并没有。

如果我再这样做df['dates'] = df['timestamp'].dt.date我收到以下错误

Can only use .dt accessor with datetimelike values 

幸运的是,我已经保存的数据帧与dates以csv,但我现在想在格式创建另一列time23:00:00.051

编辑

从原始数据文件(15万个样本),该timestamp柱看起来李柯以下(前5个样品):

  timestamp 

0   2016-06-13T00:00:00.051+01:00 
1   2016-06-13T00:00:00.718+01:00 
2   2016-06-13T00:00:00.985+01:00 
3   2016-06-13T00:00:02.431+01:00 
4   2016-06-13T00:00:02.737+01:00 

以下命令

df['timestamp'] = df['timestamp'].apply(lambda x : pd.to_datetime(str(x))) 

timestamp柱看起来像dtype如D型细胞后:datetime64 [NS]

0 2016-06-12 23:00:00.051 
1 2016-06-12 23:00:00.718 
2 2016-06-12 23:00:00.985 
3 2016-06-12 23:00:02.431 
4 2016-06-12 23:00:02.737 

然后终于

df['dates'] = df['timestamp'].dt.date 

0   2016-06-12 
1   2016-06-12 
2   2016-06-12 
3   2016-06-12 
4   2016-06-12 

编辑2

发现了错误。我已经清理了数据并将数据帧保存在csv文件中,因此我不必再次进行清理。当我读取csv时,时间戳dtype更改为对象。现在我该如何解决这个问题?

+2

好吧,这意味着你有一些duff值,所以你可以强制这些duff值为'NaT':'df ['timestamp'] = pd.to_datetime(df ['timestamp'],errors ='coerce')'then你可以使用'dropna'来除掉这些值,然后你可以像以前一样调用'dt.date' – EdChum

+0

'df.timestamp.isnull()。sum()'返回0 –

+0

对不起,除非你发布你的原始数据和代码有错误,那么这将成为一个假设的姿势练习浪费时间 – EdChum

回答

4

进口日期时间

如果日期是字符串形式然后

df['DateTime'] = [datetime.datetime.strptime(d, "%Y-%m-%d %H:%M") for d in 
df["DateTime"]]# this line converts the string object in Timestamp object 
df['Date'] = [datetime.datetime.date(d) for d in df['DateTime']]# extracting date from timestamp 
df['Time'] = [datetime.datetime.time(d) for d in df['DateTime']]# extracting time from timestamp 

如果对象是已经在时间戳格式比跳过代码的第一行。

“%Y-%m-%d%H:%M”这意味着您的时间戳记对象必须采用如“2016-05-16 12:35:00”的形式。