Разделить текстовый столбец как мин: сек - PullRequest
1 голос
/ 27 февраля 2020

У меня есть детали времени в виде текста в кадре данных.

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 должны быть указаны во втором столбце, но они перечислены в 1-м столбце, и, следовательно, я не могу соединить два столбца. Может кто-нибудь поделиться своими идеями, как выполнить эту операцию.

Ответы [ 2 ]

0 голосов
/ 27 февраля 2020

Я думаю, вы ищете что-то подобное. Я использую регулярное выражение для получения всех числовых значений, который возвращает список, который позже объединяется для создания единой строки.

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 голосов
/ 27 февраля 2020

Сначала я изменил формат столбца, чтобы он был похож на тип данных 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
...