python - 数据框列上的 pd.Timedelta 转换

标签 python pandas

我正在尝试将数据框列转换为时间增量,但遇到了问题。该列的格式类似于“+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')

如果我想将一个系列转换为具有我想要的输出的时间增量,应该采用什么方法?

最佳答案

我强烈建议使用专门设计和矢量化(即非常快)的方法: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]

计时针对 20 万行 DF:

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

关于python - 数据框列上的 pd.Timedelta 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38960514/

相关文章:

python - 从 Pandas 输出中删除行数

Python 类型错误(dtype ('<U51')

python - 聚合数据并获取总和和计数

python - 尝试使用 Scapy 从 802.11 帧检索 channel

python - 'loc' 和 'to_frame' 的数据帧格式不同

python - 如何将 Pandas 中的重复编号列转换为单个非编号列?

python - 为什么 numba 在这个简单的求和上要快得多?

python - PYMONGO - 如何将查询 $in 运算符与 MongoID 一起使用?

python - 从(或附近)具有相同名称的脚本导入库会引发 "AttributeError: module has no attribute"或 ImportError 或 NameError

python - 如何管理项目周转时间?