将所有 "HH:MM:SS" 转换为秒并将无效字符串转换为 NaT 的最有效方法是什么?
What is the most efficient way of converting all "HH:MM:SS" to seconds and invalid strings to NaT?
我有一个 DataFrame 将马拉松分段(5K、10K 等)和标识符(年龄、性别、国家/地区)存储为列,将个人存储为行。马拉松赛段拆分列的每个单元格可能包含“HH:MM:SS”格式的字符串或“-”(表示该个人的马拉松赛段拆分数据无效或不存在)。
将所有“-”转换为 NaT 并将“HH:MM:SS”转换为秒的最有效方法是什么?
这是一些示例数据:
Age M/F Country 5K ... 15K 20K Half Official Time
2323 38 M CHI 0:21:40 ... 1:03:54 1:25:07 1:29:43 2:58:47
2324 23 M USA 0:21:26 ... 1:02:09 1:22:17 1:26:34 2:58:47
2325 36 M USA 0:21:08 ... 1:02:55 1:23:56 1:28:30 2:58:47
2326 37 M POL 0:20:34 ... 1:02:03 1:22:52 1:27:24 2:58:47
2327 32 M DEN - ... 1:03:02 1:24:06 1:28:39 2:58:48
我已经引用了 但我的数据已经从 CSV 文件中读取(我不想更改我在 CSV 文件中的读取方式)并且似乎无法接受“- ”。使用以下代码转换为 DateTime 对象:
df.loc[:, "5K":] = df.loc[:, "5K":].apply(pd.to_datetime, format="%H:%M:%S", errors="coerce")
使马拉松赛段拆分列的每个单元格都带有前缀“1900-01-01”。
如果您要测量运行时间,更合适的转换函数可能是 pd.to_timedelta
:
df.loc[:, "5K":].apply(pd.to_timedelta, unit='S', errors='coerce'))
这里要记住两点:
对于持续时间,而不是时间轴上的点,pd.to_timedelta
在概念上比 pd.to_datetime
更合适。
我有一个 DataFrame 将马拉松分段(5K、10K 等)和标识符(年龄、性别、国家/地区)存储为列,将个人存储为行。马拉松赛段拆分列的每个单元格可能包含“HH:MM:SS”格式的字符串或“-”(表示该个人的马拉松赛段拆分数据无效或不存在)。
将所有“-”转换为 NaT 并将“HH:MM:SS”转换为秒的最有效方法是什么?
这是一些示例数据:
Age M/F Country 5K ... 15K 20K Half Official Time
2323 38 M CHI 0:21:40 ... 1:03:54 1:25:07 1:29:43 2:58:47
2324 23 M USA 0:21:26 ... 1:02:09 1:22:17 1:26:34 2:58:47
2325 36 M USA 0:21:08 ... 1:02:55 1:23:56 1:28:30 2:58:47
2326 37 M POL 0:20:34 ... 1:02:03 1:22:52 1:27:24 2:58:47
2327 32 M DEN - ... 1:03:02 1:24:06 1:28:39 2:58:48
我已经引用了
df.loc[:, "5K":] = df.loc[:, "5K":].apply(pd.to_datetime, format="%H:%M:%S", errors="coerce")
使马拉松赛段拆分列的每个单元格都带有前缀“1900-01-01”。
如果您要测量运行时间,更合适的转换函数可能是 pd.to_timedelta
:
df.loc[:, "5K":].apply(pd.to_timedelta, unit='S', errors='coerce'))
这里要记住两点:
对于持续时间,而不是时间轴上的点,pd.to_timedelta
在概念上比 pd.to_datetime
更合适。