Извлечение YYYY-MM из столбца datetime

У меня есть фреймворк этого формата -

var1  date
A     2017/01/01
A     2017/01/02
...

Я хочу, чтобы дата была преобразована в формат YYYY-MM, но df['date'].dtype - это object.
Как я могу удалить часть дня с даты, сохранив тип данных как datetime?

Ожидаемый результат -

A - 2017/01

Спасибо

вам нужно сначала проанализировать текущие даты - есть аргумент parse_dates, когда вы читаете файлы csv. Затем вы можете преобразовать в любой результат, который хотите. В качестве альтернативы просто используйте лямбда-функцию df.date.apply (lambda x: x [0: 4] + "/" + x [4: 5])

alex314159 19.06.2018 10:34
How can I remove the day part from date while keeping the data type as datetime?. Это невозможно. Как и в реальной жизни, у каждого свидания есть день. Выберите то, что вы хотите: строку (с любыми компонентами, которые вам нравятся) или дату и время (со всеми компонентами, даже если они не все отображается).
jpp 19.06.2018 11:03

@jpp, мы можем использовать dtype period как компромисс между dtypes datetime и object ...

MaxU 19.06.2018 11:10

@MaxU, Справедливая точка. Спасибо за повторное открытие с допустимым компромиссом :)

jpp 19.06.2018 11:11
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
4
556
2

Ответы 2

Возможна замена каждой даты первым днем ​​месяца:

pd.to_datetime(d["date"], format = "%Y/%m/%d").apply(lambda x: x.replace(day=1))

Результат:

0 2017-01-01
1 2017-01-01

dtype - это объект. мне это нужно как datetime

Naman Doshi 19.06.2018 10:53

Боюсь, это не отвечает на вопрос, что требует - компромисс. У объекта datetime нельзя "удалить" день.

jpp 19.06.2018 11:12

У вас не может быть собственного представления для dtype datetime. Но у вас есть следующие варианты:

  1. используйте строки - у вас может быть любое представление (по вашему желанию), но все методы и атрибуты datetime теряются
  2. используйте datetime, но установите для части day значение 1 (как @Kopytok), как уже было показано.
  3. используйте period dtype, который по-прежнему позволяет использовать некоторую арифметику даты

Демо:

In [207]: df
Out[207]:
  var1       date
0    A 2018-12-31
1    A 2017-09-07
2    B 2016-02-29

In [208]: df['new'] = df['date'].dt.to_period('M')

In [209]: df
Out[209]:
  var1       date     new
0    A 2018-12-31 2018-12
1    A 2017-09-07 2017-09
2    B 2016-02-29 2016-02

In [210]: df.dtypes
Out[210]:
var1            object
date    datetime64[ns]
new             object
dtype: object

In [211]: df['new'] + 8
Out[211]:
0   2019-08
1   2018-05
2   2016-10
Name: new, dtype: object

Другие вопросы по теме