Как преобразовать дату в строковом формате в заданное значение в python pandas

#python #pandas #datetime

#python #pandas #дата и время

Вопрос:

У меня есть следующий столбец данных с именем Date и состоит из следующего формата (объекта)

 2020-09-28 21:56:00
2020-09-24 20:20:00
2020-09-24 20:20:00
2020-09-24 20:20:00
2020-09-24 20:20:00
2020-09-24 20:20:00
2020-09-24 20:20:00
2020-09-24 20:20:00
...
  

Я хотел бы преобразовать это в объект datetime, чтобы я мог использовать подмножество по дате .loc . Я рассмотрел вопросы, на которые были даны ответы, когда данные представлены в другом формате, но я не уверен, как это сделать, когда дата находится в формате, показанном выше. Любая помощь приветствуется. Спасибо!

Комментарии:

1. df['Date'] = pd.to_datetime(df['Date']) должно сработать для вас. Если нет, то есть другая причина, которая не воспроизводится из данных, которыми вы поделились. Если есть ошибка, пожалуйста, отправьте сообщение об ошибке.

2. Ваш вопрос был немного неясным, я просто понял, что, по-моему, у вас уже есть фрейм данных со столбцом ‘Date’ в качестве объектов datetime? Если это так, проигнорируйте первую часть моего ответа и просто перейдите к биту фильтрации. Я думал, у вас есть список строк даты и времени…

Ответ №1:

Модуль python datetime сделает именно то, что вам нужно. Далеко внизу страницы есть раздел, посвященный кодам форматирования.

Я считаю, что вам нужно что-то в виде:

 import pandas as pd
from datetime import datetime as dt

# Your data.
data = [
    '2020-09-28 21:56:00',
    '2020-09-24 20:20:00',
    '2020-09-24 20:20:00',
    '2020-09-24 20:20:00',
    '2020-09-24 20:20:00',
    '2020-09-24 20:20:00',
    '2020-09-24 20:20:00',
    '2020-09-24 20:20:00'
    ]
# Your data: in a pandas dataframe.
df = pd.DataFrame({'Date':data})

# Iterate over the data.
datetimeObjects = []
for date in df['Date']:
    datetimeObjects.append( dt.strptime(date,'%Y-%m-%d %H:%M:%S') )
# Create a new column of datetime objects.
df['DateTimeObjects'] = datetimeObjects
  

Или (как указано @David-Erickson ниже) вы можете просто:

 df['Date'] = pd.to_datetime(df['Date'],format='%Y-%m-%d %H:%M:%S')
  

В зависимости от того, как вы хотите фильтровать свои объекты, вы можете создать начальную и конечную дату для поиска между:

 start = dt(2020,9,28)
end = dt(2020,9,30)
  

Затем вы можете создать маску и использовать locate для получения вашей информации с помощью pandas:

 mask = (df['DateTimeObjects'] > start) amp; (df['DateTimeObjects'] < end)
filteredData = df.loc[mask]
  

Я надеюсь, это поможет вам начать.

Комментарии:

1. Даже со строками просто df['Date'] = pd.to_datetime(df['Date']) должно работать.

2. Верно, ваш способ намного более лаконичен, чем мой! На другом примечании… Я не уверен, как он вообще получил свои даты, потому что я бы просто превратил их в объекты dt до того, как он создал фрейм данных.

3. некоторые анализируются как даты при чтении данных из Excel, csv и т. Д., Но это не обязательно, и вы можете сделать это после.

Ответ №2:

AFAIK, вы можете использовать dateutil после его установки с помощью

 pip install python-dateutil
  

это было бы легко для прямого использования для преобразования строкового типа date в объект datetime в приведенном ниже примере

 from dateutil.parser import parse
        
def getDateTimeFromISO8601String(string):
    d = parse(string)
    return d

new_yourDtList = [getDateTimeFromISO8601String(x) for x in yourDtList]