#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')
удалит час, мин и сек