python - 使用 pandas 将整数转换为 timedelta
问题描述
我在 pandas df 中有一些值是正整数和负整数,我想将它们转换为 timedeltas,以便我可以将它们放入 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 和 duration 表示为 timedeltas,但我不断得到零值?我在用着
data['air_time'] = pd.to_timedelta(data['air_time'], errors='coerce')
解决方案
如果您获得所有00:00:00.000000
值,那么您的air_time
值可能是字符串。(您可以air_time
通过检查来检查列的数据类型data.info()
。如果 dtype显示,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'
参数告诉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
, can 也接受字符串作为输入。例如,
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')
产生相同的结果。
推荐阅读
- java - 带有两个范围拇指的圆形 Seekbar
- python - Tkinter 有什么方法可以淡出小部件吗?
- reactjs - 架构 x86_64 react-native firebase 的未定义符号
- regex - xml 模式检查因模式匹配而失败
- javascript - 异步 forEach 循环返回一个数组
- r - 如何从 R 中的数据框列表中选择特定值?
- python - 基于生成器的协程在 python 3.7 中被弃用
- apache-spark - SparkSQL - 提取多个正则表达式匹配(仅使用 SQL)
- amazon-web-services - 本地 Docker 运行失败(未找到清单中指定的程序集)
- mysql - MySQL 如何处理对非关键属性的选择查询?