繁体   English   中英

将 MM:SS 格式的 Pandas Dataframe 列 object 转换为日期时间类型?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM