такие данные у меня есть
0 "30-01-2018 18:46 pm"
1 "30-01-2018 01:25 am"
2 "2018-01-29 20:57 pm"
3 "29-01-2018 18:23 pm"
4 "01-29-2018 15:53 pm"
вот формат всех этих строк, и для каждой строки он разный
как убрать эти am
и pm
??
Является ли это возможным?
заранее спасибо
@ilja да .. это строка (я обновил вопрос)
будет чрезвычайно сложно (а иногда и невозможно) отличить format='%d-%m-%Y %H:%M %p'
от format='%m-%d-%Y %H:%M %p'
, например: 02-03-1999 12:23 pm
может быть либо 3 февраля, либо 2 марта. Вы вообще не можете сказать
@DavidCulbreth Я знаю, поэтому я разместил это здесь, потому что мы можем сделать это с помощью Excel (изменить форматирование и сделать его одинаковым для всех), я хочу знать, возможно ли это с пандами или нет?
откуда вы знаете, что делаете это правильно в excel? у вас есть что-то еще, чтобы сказать вам, какой формат вы используете? Я хочу сказать, что без дальнейшего контекста вы даже не знаете, правильно ли вы поступаете с самого начала.
@DavidCulbreth в excel мне просто нужно ввести %d-%m-%Y %H:%M %p
и все конвертируется в этот формат, я уже это сделал
@jony и excel будут делать предположения о том, из какого формата вы конвертируете. Без такого же рода предположений, которые были бы произвольным предпочтением одного формата другому, это преобразование невозможно. Вы не знаете, что даты, которые дает вам Excel, верны, если только вы не проверяете вручную весь результат. Вы можете проверить данные, которые он сгенерировал, на наличие ошибок. Эта же операция возможна с пандами, но нет никаких дальнейших «обещаний» быть «более правильными».
Я бы использовал try/except, чтобы попробовать каждый из предложенных вами форматов, пока один из них не сработает. Затем преобразуйте его в объект datetime, используя strptime. Затем преобразуйте этот объект даты и времени в целевой формат '%d-%m-%Y %H:%M'
, используя strftime.
Поскольку у вас есть два формата, которые лексически взаимозаменяемы почти для половины дат (format='%d-%m-%Y %H:%M %p
' и format='%m-%d-%Y %H:%M %p'
), эта задача логически, математически и доказуемо невозможна. Вы не можете определить, какой формат используется между этими двумя для любой даты любого месяца до 13-го числа этого месяца. результирующий формат будет неоднозначным в отношении того, является ли день или месяц первым элементом в формате, и поэтому его невозможно транспонировать без некоторых грубых предположений об используемом формате. Эти предположения могут работать нормально, но равновероятно, что он будет неправильно анализировать все даты. Это также относится к подходу на основе Excel, который вы используете в настоящее время. Пожалуйста, проверьте каждый элемент данных, созданных с помощью этого метода, так как он, вероятно, содержит неправильно проанализированную информацию.
Если вы выясните, какой формат вы на самом деле используете, или другой способ определить подходящий формат, не стесняйтесь задавать еще один вопрос, и я уверен, что сообщество вам поможет.
Если это просто строки, вы можете удалить из них am
и pm
следующим образом:
# get your date somehow.
my_date = "01-29-2018 15:53 pm"
if my_date.endswith(" pm") or my_date.endswith(" am"):
my_date = my_date[:-3]
print(my_date)
>>> 01-29-2018 15:53
привет, могу я удалить ("01-11-2018 12:26" "01-11-2018 10:05" "01-11-2018 10:11" "01-11-2018 20:38" "01-11-2018 10:59") утра и вечера из этих ?? если да, то как? я думаю это решит эту проблему
Большое спасибо, чувак
какой у вас тип данных? нить?