【问题标题】:pandas to_timedelta function seems to convert data to 0pandas to_timedelta 函数似乎将数据转换为 0
【发布时间】:2017-02-03 21:16:36
【问题描述】:

这一直对我有用,但从几天前开始,我得到了奇怪的结果。

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

谁能告诉我这是怎么回事?

编辑: 在我的实际代码中,我正在使用

将我的(即将成为 timedelta)列更改为整数
df['col'].astype(int, inplace = True)

在调用 to_timedelta 函数之前。我真的应该这样做

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

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

【问题讨论】:

    标签: python pandas timedelta


    【解决方案1】:

    to_timedelta的默认单位是'ns',请参考文档或函数原型:

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

    所以你只生成了 1 到 5 纳秒的增量,显示并没有那么深。

    很可能您选择了错误的单位,请将 unit='something for you' 传递给函数。

    编辑以解释更多 OP 的 cmets

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

    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
    

    【讨论】:

    • 确实是这样,为了让timedelta注册这个,最小值应该是1000
    • @EdChum:嗯,是“展示”,而不是“注册”——它们仍然在那里,在pd.to_timedelta(my_series).dt.nanoseconds。 :-)
    • @DSM 啊是的,这是真的,我只是在查看输出而没有考虑 timedelta 属性
    • 嗯,实际上我使用的是 unit = 'D' 但返回值说 dtype: timedelta64[ns]。
    • @EdChum 在回答中添加了解释
    猜你喜欢
    • 2019-04-03
    • 2013-08-26
    • 2014-08-19
    • 2019-05-14
    • 2018-08-14
    • 2012-08-15
    • 1970-01-01
    • 2019-07-01
    • 2021-12-13
    相关资源
    最近更新 更多