2017-02-03 74 views
1

这一直对我来说,但几天前开始我得到奇怪的结果。熊猫to_timedelta函数似乎将数据转换为0

my_list = [1,2,3,4,5] 
my_series = pd.Series(my_list) 
print pd.to_timedelta(my_series) 

刚刚返回

0 00:00:00:000000 
1 00:00:00:000000 
2 00:00:00:000000 
3 00:00:00:000000 
4 00:00:00:000000 

谁能告诉我是怎么回事?

编辑: 在我实际的代码我用

df['col'].astype(int, inplace = True) 

调用to_timedelta函数之前改变了我的(即将timedelta)列整数。我真的应该一直在做

new_col = pd.to_numeric(df['col']) 

然后在new_col上调用to_timedelta。也许有人可以阐明为什么会这样。

回答

4

to_timedelta默认的单位是“NS”,请参考文档或函数原型:

def to_timedelta(arg, unit='ns', box=True, errors='raise', coerce=None): 

所以你刚才生成1至5 naoseconds三角洲和显示也没有这么深。

这很可能是你选错了单位,将单位='对你有用的东西'传递给函数。

编辑解释更多OP的评论

通过使用合适的单位,你会得到你所期望的:

pd.to_timedelta(my_series, unit='D') 
Out[415]: 
0 1 days 
1 2 days 
2 3 days 
3 4 days 
4 5 days 
dtype: timedelta64[ns] 

仍然在该系列中的对象的类型是timedelta[ns]是内部对象的表示。括号内的ns是为了提醒你,timedelta对象的精度范围缩小到纳秒。

如果我参加的第一个元素的原始内在价值,我觉得纳秒:

pd.to_timedelta(my_series, unit='D')[0].delta 
Out[425]: 86400000000000 
+0

这的确是这样的,最低值是1000,以便timedelta注册此 – EdChum

+1

@EdChum:很好,“显示”,而不是“注册” - 他们仍然在_there_中,在“pd.to_timedelta(my_series).dt.nanoseconds”中。 :-) – DSM

+0

@DSM啊是的,这是真的我只是看着输出没有考虑timedelta属性 – EdChum