#python #python-3.x #python-datetime #strptime
#python #python-3.x #python-datetime #strptime
Вопрос:
Мне нужно построить данные кампании с помощью matplotlib. Отправленное время необходимо сравнивать между различными кампаниями, запущенными в один и тот же день, поэтому HH:MM
важно только то, что указано в отдельной колонке. Я получаю данные в формате csv с одним столбцом, показывающим время, к сожалению, если оно было отправлено, например 09:45
, оно отображается как 9:45
:
['9:05', '9:20', '9:25', '9:35', '9:40', '10:17', '10:22'...]
Может кто-нибудь, пожалуйста, дать мне подсказку? Я использую Python 3, действительно начинающий пользователь, поэтому считаю, что soemone может указать на мою очевидную ошибку и направить меня к правильному решению. Спасибо
import pandas
from datetime import datetime
from datetime import time
file_name = r'''C:\Users\testing.csv''' # name of your excel file
df1 = pandas.read_csv(file_name, encoding='utf-8')
df_Campaign1 = df1[df1['DataSource ID'].str.contains('Campaign1')==True]
Campaign1_times = df_Campaign1['time sent'].tolist()
Campaign1_times = [datetime.strptime(slot,"%H:%M") for slot in Campaign1_times]
print(Campaign1_times)
Я ожидал получить 09:05
формат etc datetime, чтобы я мог сопоставлять результаты нескольких кампаний друг с другом на временной шкале, но, к сожалению, результат:
[datetime.datetime(1900, 1, 1, 9, 5), datetime.datetime(1900, 1, 1, 9, 20), datetime.datetime(1900, 1, 1, 9, 25), datetime.datetime(1900, 1, 1, 9, 35), datetime.datetime(1900, 1, 1, 9, 40), datetime.datetime(1900, 1, 1, 10, 17)...]
Комментарии:
1. Времена без дат в значительной степени бессмысленны. Вы получаете добавленную дату по умолчанию; если у вас нет фактических дат, то это не должно быть проблемой вообще
2. В чем разница между 22:00 и 07:00? Проблема не в начальном нуле, а в контексте даты.
3. Спасибо, я это понимаю, поэтому, если я хочу, чтобы он отображал HH: MM, и мне не нужно указывать дату, должен ли я использовать другую функцию? Мне нужно сопоставить различные данные camapign друг с другом, поэтому мне нужно сохранить их все на временной шкале — суть в том, чтобы проверить, какой из них работает лучше в данный момент времени (диапазон времени).
4. Если это только вопрос времени, и все они происходят в один и тот же день, тогда вы можете жить
1900
как год
Ответ №1:
Вероятно, это далеко не лучшее решение, но следующий код вернул время в формате HH: MM: SS. Это то, что вам нужно?
import datetime
time_ = str(datetime.datetime.strptime('9:30', '%H:%M').time())
print(time_)
Пример возвращает следующую строку: ’09:30:00′
Комментарии:
1. большое спасибо, это, к сожалению, возвращает str, datetime.strptime(слот, ‘%H:%M’).strftime(‘%H:%M’) будет делать то же самое, возвращая 09:05, однако мне нужно иметь формат как datetime / time, иначе я могуне отображать несколько кампаний на одной временной шкале — это другая проблема, но мне кажется, что если я делаю это с помощью str, matplotlib начинает отображать одну за другой, а не отображать их на одной временной шкале.
2. Просто удалите преобразование str, и оно вернет объект datetime.time. time_ = datetime.datetime.strptime(‘9:30’, ‘%H:%M’).time() печать(тип(time_)) <класс ‘datetime.time’>
3. спасибо, это действительно сделало свое дело — и извините, сейчас 9 вечера, и я работаю над этим с самого утра (