#python #pandas #datetime
Вопрос:
У меня есть фрейм данных с одним столбцом, который представляет собой дату и время и является строкой. Формат даты и времени выглядит следующим образом: 4/27/2021 12:39
это то, что я до сих пор пытался преобразовать строку в дату и время:
new_list = []
for i in range(len(open_times)):
date = df.iloc[i]['Open Datetime']
good_date = date.to_datetime()
# good_date = date.topydatetime()
new_list.append(good_date)
Я использовал to_pydatetime()
в прошлом, однако строка была в другом формате.
Когда я запускаю код сверху, я получаю эту ошибку: AttributeError: 'str' object has no attribute 'to_datetime'
и я получаю ту же ошибку при запуске закомментированной строки, за исключением to_pydatetime
.
Есть какие-нибудь мысли о том, как устранить эту ошибку? Я думаю, что это происходит потому, что формат строки отличается от обычного.
Комментарии:
1.
to_datetime
иto_pydatetime
ожидайте работы с типом даты и времени pandas, который является 64-разрядным целым числом. Они вообще не работают со строками. В ваших прошлых усилиях панды, должно быть, распознали строковый формат и импортировали их как типы datetime64. Вам придется использовать что-то вродеdatetime.datetime.strptime
перевода этих строк.
Ответ №1:
Вам нужно использовать datetime.strptime(date_string, format)
для преобразования строки в тип datetime
from datetime import datetime
for i in range(len(open_times)):
date = df.iloc[i]['Open Datetime']
good_date = datetime.strptime(date, '%m/%d/%Y %H:%M')
Но вы могли бы использовать pd.to_datetime
напрямую
df['Open Datetime'] = pd.to_datetime(df['Open Datetime'])
# Convert a column to list
new_list = df['Open Datetime'].values.tolist()
Комментарии:
1. «Вы должны использовать pd.to_datetime напрямую».:) Это намного эффективнее, чем цикл for
2. О, мне действительно нравятся оба способа! Я не знал, что вы можете просто напрямую преобразовать фрейм данных. Единственная причина, по которой мне больше нравится первое, чем второе, заключается в том, что второе имеет странный формат. Это дает целые числа. Например, он дает 1619527140000000000 в качестве значения одной даты-времени, и я попытался преобразовать его с помощью метки datetime.fromtimestamp(1619527140000000000 / 1e3), но потерпел неудачу
3. @svlad Это не должно давать вам целых чисел. Как насчет
df['Open Datetime'] = pd.to_datetime(df['Open Datetime'], format='%m/%d/%Y %H:%M')
этого ?4. Это прекрасно работает! Большое вам спасибо за помощь! Очень признателен вам за это!