使用 pandas 将整数转换为 timedelta
Converting ints to timedelta with pandas
我在 pandas df 中有一些值,它们是正整数和负整数,我想将它们转换为时间增量,以便我可以将它们放入 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_delay、arr_delay、air_time 和持续时间表示为时间增量,但我总是得到归零值?我正在使用
data['air_time'] = pd.to_timedelta(data['air_time'], errors='coerce')
如果您获取所有 00:00:00.000000
值,那么您的 air_time
值可能是字符串。 (您可以通过检查 data.info()
来检查 air_time
列的数据类型。如果数据类型为 object
则值是 Python 对象(例如 str
s) 而不是 NumPy 整数数据类型。然后您可以通过检查 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')
unit='m'
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')
产生相同的结果。
我在 pandas df 中有一些值,它们是正整数和负整数,我想将它们转换为时间增量,以便我可以将它们放入 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_delay、arr_delay、air_time 和持续时间表示为时间增量,但我总是得到归零值?我正在使用
data['air_time'] = pd.to_timedelta(data['air_time'], errors='coerce')
如果您获取所有 00:00:00.000000
值,那么您的 air_time
值可能是字符串。 (您可以通过检查 data.info()
来检查 air_time
列的数据类型。如果数据类型为 object
则值是 Python 对象(例如 str
s) 而不是 NumPy 整数数据类型。然后您可以通过检查 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')
unit='m'
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')
产生相同的结果。