Преобразование и заказ отметок времени

У меня есть столбец pandas df с отметками времени, которые содержат HH: MM до полуночи и HH: MM: SS после полуночи. В конце концов я хочу отсортировать эти значения.

import pandas as pd

d = ({
    'A' : ['08:00','12:00','24:00:00','20:00','16:00','26:00:00'],
    })

df = pd.DataFrame(data=d)

Я не могу добавить: 00 в столбец, так как некоторые из них вернут:

df['A'] = [x + ':00' for x in df['A']]

             A
0     08:00:00
1     12:00:00
2  24:00:00:00
3     20:00:00
4     16:00:00
5  26:00:00:00

Мой предполагаемый результат:

          A
0  08:00:00
1  12:00:00
4  16:00:00
3  20:00:00
2  24:00:00
5  26:00:00

Всегда ли это :00 или можно 20:02?

rafaelc 03.08.2018 02:51
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
37
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Использование регулярного выражения с str.replace:

df.A.str.replace(r'(^\d+:\d+$)', r'\1:00')

0    08:00:00
1    12:00:00
2    24:00:00
3    20:00:00
4    16:00:00
5    26:00:00
Ответ принят как подходящий

Использование нарезки строк:

df['A'] = df['A'].str[:5] + ':00'

print(df)

          A
0  08:00:00
1  12:00:00
2  24:00:00
3  20:00:00
4  16:00:00
5  26:00:00

Еще один ответ на кучу (добавляйте секунды только к коротким строкам):

df.loc[df["A"].str.len()==5, "A"] += ":00"

Возможно, используя np.where, если в ваших данных 24:00:01

np.where(df.A.str.len()==5,df.A+':00',df.A)
Out[187]: 
array(['08:00:00', '12:00:00', '24:00:00', '20:00:00', '16:00:00',
       '26:00:00'], dtype=object)

Это работает, даже если у вас есть что-то вроде 24:00:04 (я говорю это, потому что он не просто напрямую изменит его на 24:00:00):

import pandas as pd

d = ({
    'A' : ['08:00','12:00','24:00:04','20:00','16:00','26:00:00'],
    })

df = pd.DataFrame(data=d)
print(df['A'].apply(lambda x: x if len(x.split(':'))==3 else x+':00'))

Выход:

0    08:00:00
1    12:00:00
2    24:00:04
3    20:00:00
4    16:00:00
5    26:00:00
Name: A, dtype: object

Другие вопросы по теме