首页 > 解决方案 > 将文本列拆分为 min:sec

问题描述

我在 dataframe 中有一个时间详细信息作为文本。

dict1={'time' : ['2 min 19 sec','2 min 43 sec','1 min 33 sec','32 sec','40 sec','22 sec']}
df=pd.DataFrame(dict1)


    time
0   2 min 19 sec
1   2 min 43 sec
2   1 min 33 sec
3   32 sec
4   40 sec
5   22 sec

我希望输出生成为

      time         updtime
 0  2 min 19 sec    2:19
 1  2 min 43 sec    2:43
 2  1 min 33 sec    1:33
 3  32 sec          0:32
 4  40 sec          0:40
 5  22 sec          0:22

我尝试分割时间,但我在数据对齐方面遇到了问题。

 df['time'].str.split("min", n =2, expand = True)

输出:

    0        1
-------------------
0   2       19 sec
1   2       43 sec
2   1       33 sec
3   32 sec  None
4   40 sec  None
5   22 sec  None

第 3,4,5 行的值应该列在第二列,但它列在第一列,因此我无法加入这两列。任何人都可以分享您的想法如何执行此操作。

标签: pythonpandastimesplit

解决方案


首先,我将列的格式更改为与数据类型相似DateTime并将字符串化为预期的格式

>>> df['time'] = df.time.apply(lambda x: f'0 min {x}'if 'min' not in x else x)
>>> df['uptime'] = pd.to_datetime(df.time, format='%M min %S sec').dt.strftime('%M:%S')

输出:

>>> df
           time uptime
0  2 min 19 sec  02:19
1  2 min 43 sec  02:43
2  1 min 33 sec  01:33
3  0 min 32 sec  00:32
4  0 min 40 sec  00:40
5  0 min 22 sec  00:22

推荐阅读