Python: от метки времени к дате

У меня есть следующий фрейм данных:

df = pd.DataFrame({'user': ['Andrea', 'Gioele'],
                    'year': [1983, 2014],
                    'month': [11, 1],
                    'day': [8, 11]} )

Затем я создаю дату для каждой строки двумя способами. Первый:

df['dateA'] = df.apply(lambda x: datetime.date(x['year'],x['month'],x['day']), axis=1)

Во-вторых:

df['dateB'] = pd.to_datetime(df[['year','month','day']])

У меня есть следующий фрейм данных:

>>> df
10:    day  month  user   year      dateA      dateB
0       8     11  Andrea  1983  1983-11-08  1983-11-08
1      11      1  Gioele  2014  2014-01-11  2014-01-11

У меня есть два разных формата:

>>> df['dateA']
1983-11-08
2014-01-11
Name: dateA, dtype: object
>>> df['dateB']
1983-11-08
2014-01-11
Name: dateB, dtype: datetime64[ns]

Более того:

>>> df['dateA'].iloc[0]
datetime.date(1983, 11, 8)
>>> df['dateB'].iloc[0]
Timestamp('1983-11-08 00:00:00')

Проблема в том, что вычисление даты с помощью первого метода довольно дорого, поэтому я хотел бы преобразовать df['dateB'] такой, что он имеет формат "объект". Есть ли способ?

Примечание: я уже попробовал то, что предполагают возможные "дублированные вопросы" (у них всегда есть строки, а не метки времени), но я получаю следующее

>>> datetime.datetime.fromtimestamp(df['dateB'].iloc[0])
Traceback (most recent call last):
  File "<pyshell#68>", line 1, in <module>
    datetime.datetime.fromtimestamp(df['dateB'].iloc[0])
TypeError: a float is required

1 ответ

Решение

Я думаю, что вы можете использовать dt.date:

df['dateB'] = pd.to_datetime(df[['year','month','day']]).dt.date

print (df['dateB'].dtype)
object

print (type(df['dateB'].iloc[0]))
<class 'datetime.date'>
Другие вопросы по тегам