удаление времени из переменной даты и времени в pandas?

#python #pandas

Вопрос:

у меня есть переменная, состоящая из 300 тысяч записей с датами, и дата выглядит так
2015-02-21 12:08:51
с этой даты я хочу удалить время

тип переменной даты — pandas.core.series.series

Именно так я и пытался

 from datetime import datetime,date
date_str = textdata['vfreceiveddate']  
format_string = "%Y-%m-%d"
then = datetime.strftime(date_str,format_string)   
 

какая-то случайная ОШИБКА

В приведенном выше коде textdata — это мое datasetname, а vfreceived date — переменная, состоящая из дат
Как я могу написать код, чтобы удалить время из datetime.

Ответ №1:

Предполагая, что все ваши строки datetime имеют аналогичный формат, просто преобразуйте их в datetime, используя to_datetime , а затем вызовите dt.date атрибут, чтобы получить только часть даты:

 In [37]:

df = pd.DataFrame({'date':['2015-02-21 12:08:51']})
df
Out[37]:
                  date
0  2015-02-21 12:08:51
In [39]:

df['date'] = pd.to_datetime(df['date']).dt.date
df
Out[39]:
         date
0  2015-02-21
 

Редактировать

Если вы просто хотите изменить отображение, а не dtype, вы можете вызвать dt.normalize :

 In[10]:
df['date'] = pd.to_datetime(df['date']).dt.normalize()
df

Out[10]: 
        date
0 2015-02-21
 

Вы можете видеть, что dtype остается как datetime :

 In[11]:
df.dtypes

Out[11]: 
date    datetime64[ns]
dtype: object
 

Ответ №2:

Вы вызываете datetime.datetime.strftime , который требует в качестве первого аргумента datetime.datetime экземпляр, потому что это несвязанный метод; но вы передаете ему строку вместо экземпляра datetime, откуда очевидная ошибка.

Вы можете работать исключительно на уровне строк, если это тот результат, который вы хотите; с данными, которые вы приводите в качестве примера, date_str.split()[0] например, будет именно та 2015-02-21 строка, которая вам, по-видимому, требуется.

Или вы можете использовать datetime , но тогда вам нужно сначала проанализировать строку, а не форматировать ее — следовательно, время str p, а не время str f:

 dt = datetime.strptime(date_str, '%Y-%m-%d %H:%M:%S')
date = dt.date()
 

если это datetime.date объект, который вы хотите (но если все, что вам нужно, это строковая форма даты, такой подход может быть «излишним»:-).

Ответ №3:

простая запись pd.to_datetime('date') удалит час, мин и сек