Передаваемый аргумент имеет значение float и datetime

При попытке извлечения из даты в формате datetime года и числа недели возникает ошибка. Пример DataFrame:

df.head()

    | ID | date_from  | date_to    |
    |----|------------|------------|
    | 1  | 2019-10-29 | 2020-05-04 |
    | 2  | 2019-01-29 | 2020-01-01 |
    | 3  | 2019-01-29 | 2020-04-15 |

При выполнении кода:

 df['date_from'].apply(lambda x: dt.datetime.strftime(x,'%Y-%W')) 

возникает ошибка:

TypeError: descriptor 'strftime' requires a 'datetime.date' object but received a 'float'

В то же время:

df['date_from'].apply(lambda x: dt.datetime.fromtimestamp(x))

выдаёт:

TypeError: an integer is required (got type datetime.date)


Ответы (1 шт):

Автор решения: MaxU

Если я правильно понял вопрос:

In [47]: df["date_from"].dt.strftime("%Y-%W")
Out[47]:
0    2019-43
1    2019-04
2    2019-04
Name: date_from, dtype: object

Для того, чтобы иметь возможность воспользоваться .dt... соответствующий столбец должен иметь тип данных datetime64. Если это строка, то сначала надо преобразовать данный столбец в datetime64:

df["date_from"] = pd.to_datetime(df["date_from"], errors="coerce")
→ Ссылка