У меня есть столбец 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






Использование регулярного выражения с 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
Всегда ли это
:00или можно20:02?