在数据框列上进行pd.Timedelta转换

5

我将尝试将数据框中的一列转换为timedelta,但是遇到了问题。该列的格式看起来像'+XX:XX:XX'或'-XX:XX:XX'

我的数据框:

    df = pd.DataFrame({'time':['+06:00:00', '-04:00:00'],})

我的方法:

    df['time'] = pd.Timedelta(df['time'])

然而,我遇到了错误:
    ValueError: Value must be Timedelta, string, integer, float, timedelta or convertible

当我执行一个更简单的例子时:
    time = pd.Timedelta('+06:00:00')

我得到了我想要的输出:
    Timedelta('0 days 06:00:00')

如果我想将一系列数据转换为我的期望时间差输出,应该采取什么方法?

2个回答

9

我强烈建议使用专门设计和向量化的方法(即非常快速):to_timedelta()

In [40]: pd.to_timedelta(df['time'])
Out[40]:
0            06:00:00
1   -1 days +20:00:00
Name: time, dtype: timedelta64[ns]

对比一个包含200K行的数据框架的时间:

In [41]: df = pd.concat([df] * 10**5, ignore_index=True)

In [42]: df.shape
Out[42]: (200000, 1)

In [43]: %timeit pd.to_timedelta(df['time'])
1 loop, best of 3: 891 ms per loop

In [44]: %timeit df['time'].apply(pd.Timedelta)
1 loop, best of 3: 7.15 s per loop

In [45]: %timeit [pd.Timedelta(x) for x in df['time']]
1 loop, best of 3: 5.52 s per loop

6
错误信息很明显: `ValueError: Value must be Timedelta, string, integer, float, timedelta or convertible`
给 `pd.Timedelta()` 方法传入的参数不属于上述数据类型之一:
>>> type(df['time'])
<class 'pandas.core.series.Series'>

也许您想要的是:

>>> [pd.Timedelta(x) for x in df['time']]
[Timedelta('0 days 06:00:00'), Timedelta('-1 days +20:00:00')]

或者:

>>> df['time'].apply(pd.Timedelta)
0            06:00:00
1   -1 days +20:00:00
Name: time, dtype: timedelta64[ns]

文档中可以查看更多相关示例。


谢谢,.apply() 方法可行并且正是我所需要的。非常感谢你的帮助! - Mike

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接