2016-12-17 29 views
1

我想要一个大熊猫数据帧的一列中从这样的格式改变:16200016:20:00(%H%M%S)车削从4位一个数据帧的熊猫的列到时间

I”已经试过这样:

t = mydataframe['column name'] 
pd.to_datetime(t, format='%H%M%S') 

但我得到这个错误:

TypeError: 'long' object is unsliceable 

但是,如果我不使用format参数我得到这个:

1970-01-01 00:00:00.000162000 

这是怎么回事?

编辑:

t.dtype 
Name: column name, dtype: int64 

print t.head(5) 
0 162000 
1 161200 
2 162400 
3 163600 
4 164800 

t.to_dict() 
{0: 162000, 
1: 161200, 
2: 162400, 
3: 163600, 
4: 164800, ... 

EDIT2:

好了,重新启动笔记本电脑的核心,解决了这个问题!电脑呃? :d

好了,现在我有这样的格式:

1900-01-01 16:20:00 

我如何改变这种做法,认为to_datetime只给出了16:20:00我吗?

EDIT3:

明白了!顺便说一句,我的第二个问题的答案在这里:How to change the datetime format in pandas

+0

在Python 3.5,pandas 0.1上为我工作8.1 –

+0

你可以显示't'也许't.dtype'和't.to_dict()' –

+0

@ juanpa.arrivillaga我正在Python 2.7.11上运行这个jupyter笔记本 –

回答

1

您需要使用.dt.time来获取新的datetime对象的时间部分。

pd.to_datetime(t, format='%H%M%S').dt.time 

您还需要上面的输出重新分配给您的数据帧。将其分配给新列,或将其重新分配回原始列。

将其分配给现有列:

mydataframe['column name'] = pd.to_datetime(t, format='%H%M%S').dt.time 

将其分配到一个新的列:

mydataframe['new column'] = pd.to_datetime(t, format='%H%M%S').dt.time 

在这两种情况下,你会得到一个数据帧,看起来像这样

Times 
0 16:20:00 
1 16:12:00 
2 16:24:00 
3 16:36:00 
4 16:48:00 
+0

我已经找到了一种方法用'.dt.strftime(“%H:%M”)做'',但这个似乎更简单:)谢谢! –

+0

@RichardLuso你用'strftime'找到了一种方法,就是把你的列变成一个字符串列。即与之前的解析方向相反。你无法计算。用@ Andy的方法,那些是真正的,可计算的时间对象。 –