使用pandas将int转换为timedelta

2024-06-28 20:21:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个函数中有一些值是正整数和负整数,我想把它们转换成timedelta,这样我就可以把它们放到Django模型的DurationField中。你知道吗

             date  dep_time dep_delay  arr_time arr_delay cancelled carrier  \
103992 2014-05-11  10:13:00        -2  12:47:00       -13         0      B6   
103993 2014-05-11  19:29:00        -1  22:15:00       -24         0      B6   
103994 2014-05-11  11:17:00         5  13:55:00         9         0      B6   
103995 2014-05-11  07:36:00       -10  09:24:00       -18         0      B6   
103996 2014-05-11  13:40:00         0  16:47:00        10         0      B6   

       tailnum flight origin dest air_time distance duration  
103992  N630JB    925    JFK  TPA      137     1005     1013  
103993  N632JB    225    JFK  TPA      137     1005     1929  
103994  N635JB    127    EWR  MCO      126      937     1117  
103995  N637JB   1273    JFK  CHS       92      636     0736  
103996  N637JB    213    JFK  LGB      352     2465     1340  

有了这些数据,我想把dep\u delay、arr\u delay、air\u time和duration表示为timedelta,但我总是得到零值?我在用

data['air_time'] = pd.to_timedelta(data['air_time'], errors='coerce')

Tags: 函数datatime整数airtimedeltadurationdelay
1条回答
网友
1楼 · 发布于 2024-06-28 20:21:00

如果要获取所有00:00:00.000000值,那么air_time值可能是字符串。(您可以通过检查data.info()来检查air_time列的数据类型。如果数据类型是object,那么值是Python对象(例如str),而不是NumPy integer数据类型。然后可以通过检查set(map(type, data['air_time']))来确认它们是字符串。)

如果它们是字符串,则可以首先使用以下命令将它们转换为整数:

data['air_time'] = data['air_time'].astype(int)

如果137表示137分钟,则使用

data['air_time'] = pd.to_timedelta(data['air_time'], unit='m', errors='coerce')

另一方面,如果137表示1小时37分钟,那么使用

data['air_time'] = pd.to_timedelta(
    (data['air_time']//100)*60 + (data['air_time'] % 100), unit='m', 
    errors='coerce')

^{} argument告诉pd.to_timedelta将值解释为分钟。你知道吗

例如

import pandas as pd

data = pd.DataFrame({'air_time':['137','137','126','92','352']})
data['air_time'] = data['air_time'].astype(int)
data['air_time'] = pd.to_timedelta(data['air_time'], unit='m', errors='coerce')

收益率

  air_time
0 02:17:00
1 02:17:00
2 02:06:00
3 01:32:00
4 05:52:00

请注意,pd.to_timedelta还可以接受字符串作为输入,如果字符串包含所需的单位。例如

import pandas as pd

data = pd.DataFrame({'air_time':['137','137','126','92','352']})
data['air_time'] = data['air_time'] + ' minutes'
#       air_time
# 0  137 minutes
# 1  137 minutes
# 2  126 minutes
# 3   92 minutes
# 4  352 minutes

data['air_time'] = pd.to_timedelta(data['air_time'], errors='coerce')

产生相同的结果。你知道吗

相关问题 更多 >