【问题标题】:Split a text column as min:sec将文本列拆分为 min:sec
【发布时间】:2020-02-27 05:22:04
【问题描述】:

我在 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 行的值应该列在第二列,但它列在第一列,因此我无法加入这两列。 任何人都可以分享您的想法如何执行此操作。

【问题讨论】:

    标签: python pandas time split


    【解决方案1】:

    首先我已将列的格式更改为与数据类型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
    

    【讨论】:

      【解决方案2】:

      我认为您正在寻找类似的东西。我正在使用正则表达式来获取所有数字值,它返回一个列表,稍后将其加入以创建单个 str。

      df["updated-time"] = df["time"].apply(lambda x : ":".join(re.findall('\\b\\d+\\b', x)))
      

      输出

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

      【讨论】:

      • 它应该显示为 0:32、0:40 等,而不是 32。对于没有最小值的条目,它应该更新为 0,然后是 sec 值。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-25
      • 1970-01-01
      • 1970-01-01
      • 2017-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多