Как я могу извлечь год из столбца year типа данных datetime (ns)?

#python #datetime

#python #datetime

Вопрос:

         1970-01-01 00:00:00.000002013
27804   1970-01-01 00:00:00.000002013
27805   1970-01-01 00:00:00.000002013
27806   1970-01-01 00:00:00.000002013
27807   1970-01-01 00:00:00.000002013
27808   1970-01-01 00:00:00.000002014
  

В самом правом углу вы можете видеть, что 2013 и 2014 мне нужны только те, которые указаны в моем столбце year.

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

1. Похоже, что год 1970, а не 2013.

2. как выводится столбец datetime? если самые правые 4 цифры представляют год, что-то идет не так. ввод, похоже, равен году, а не секундам с начала эпохи.

3. Пожалуйста, покажите, что вы пробовали до сих пор. Как уже отмечалось @MrFuppes, похоже, при создании данных произошла ошибка. Чтобы понять, что требуется больше контекста.

Ответ №1:

Вы можете преобразовать свои данные в строку и выбрать последние 4 цифры.

 import pandas as pd

df = pd.DataFrame([['1970-01-01 00:00:00.000002013'], ['1970-01-01 00:00:00.000002014']],columns = ['date'])
df['date'] = pd.to_datetime(df['date'])
df['date'] = df['date'].astype(str).str[-4:]
df

    date
---------
0   2013
1   2014
  

Ответ №2:

что-то вроде этого (на этот раз мы работаем с datetime и извлекаем часть года)

 import datetime

import pandas as pd

df = pd.DataFrame([{'date': datetime.datetime(2020, 5, 17),
                    'value': 12}, {'date': datetime.datetime(2012, 5, 17),
                                   'value': 33}])

print(df)
df['date'] = df['date'].apply(lambda d: d.year)
print(df)
  

вывод

         date  value
0 2020-05-17     12
1 2012-05-17     33
   date  value
0  2020     12
1  2012     33
  

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

1. Это не поможет, потому что тип данных находится в формате datetime и его нельзя разрезать.. :/

2. @wasirehman смотрите обновленный ответ — на этот раз работает с datetime.