![](/img/trans.png)
[英]error in converting string datetime into proper datetime format and calculate total seconds from HH:MM:SS.sss time part in pandas dataframe
[英]Converting Pandas Dataframe column object in MM:SS format to Datetime type?
0 18:30
1 24:50
2 33:21
3 28:39
4 27:30
5 21:26
6 16:42
7 16:48
8 26:07
9 18:13
10 27:15
11 24:33
12 29:43
13 NaN
14 NaN
15 NaN
16 24:58
17 26:14
18 27:36
19 33:27
Name: Minutes, dtype: object
我有一个名为Minutes
的列,它代表执行任务所花费的分钟数。 该列采用MM:SS
格式,没有毫秒或小时。 对于那些没有执行任务的人,有一些Null
值,我想用00:00
代替。 我尝试将列转换为datetime
时间
df['Minutes'] = df['Minutes'].apply(pd.to_datetime, format = '%M:%S', errors='coerce')
这给了我
1 1900-01-01 00:24:50
2 1900-01-01 00:33:21
3 1900-01-01 00:28:39
4 1900-01-01 00:27:30
5 1900-01-01 00:21:26
我想这很好,但我的目标是能够通过花费在任务上的最多时间对这些列执行排序。 在我应用pd.to_datetime
之后,该列的数据类型仍然是 object。 当我尝试排序时,我面临:
----> 1 df.sort_values(by=df['Minutes'],ascending=True) ~\anaconda3\lib\site-packages\pandas\core\frame.py 中的 KeyError Traceback(最近一次调用) sort_values(self,by,axis,ascending,inplace,kind,na_position,ignore_index,key) 5453 5454 by = by[0] -> 5455 k = self._get_label_or_level_values(by,axis=axis) 5456 5457 #需要重新换行在系列中应用密钥 function ~\anaconda3\lib\site-packages\pandas\core\generic.py in _get_label_or_level_values(self, key, axis) 1682 values = self.axes[axis].get_level_values(key)._values 1683 else : -> 1684 raise KeyError(key) 1685 1686 # 检查重复项
使用替换 NaN 值
df.fillna('00:00')
其次是:
df['Minutes'] = pd.to_datetime(df['Minutes'], format='%M:%S', errors='coerce')
其次是:
df.sort_values('Minutes') #Note Ascending is default
带有关键字errors='coerce'
pd.to_datetime
负责处理 NaN,它将在未知的持续时间内留下NaT
(非时间)。
另请注意,对于排序,您实际上根本不需要转换为日期时间。
import pandas as pd
# >>> pd.__version__
# 1.3.5
import numpy as np
df = pd.DataFrame({'Minutes': ["27:15", "24:33", "29:43", "NaN", np.NaN, None]})
# you can do a df.sort_values('Minutes') here already!
df['Minutes'] = pd.to_datetime(df['Minutes'], format='%M:%S', errors='coerce')
df = df.sort_values('Minutes')
# df['Minutes']
# 1 1900-01-01 00:24:33
# 0 1900-01-01 00:27:15
# 2 1900-01-01 00:29:43
# 3 NaT
# 4 NaT
# 5 NaT
# Name: Minutes, dtype: datetime64[ns]
要更改格式,您需要转换回字符串:
df['Minutes'].dt.strftime('%H:%M:%S')
# 1 00:24:33
# 0 00:27:15
# 2 00:29:43
# 3 NaN
# 4 NaN
# 5 NaN
# Name: Minutes, dtype: object
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.