Не поддерживается между экземплярами «Timestamp» и «str»

Я работаю с фреймворком данных, который содержит некоторые значения даты. Эти значения даты содержат годы, месяцы и дни, например 1965-07-19. Теперь я пытаюсь классифицировать их по годам каждые десять лет, что означает, что 1960–1969 годы отмечены как 1960-е годы в новом столбце «Год» и так далее. Моя проблема в том, что я получаю сообщение об ошибке «<» не поддерживается между экземплярами «Timestamp» и «str» «, в то время как я преобразовал его в фрейм данных date_time pandas.

Пример моего ДФ:

Событие Дата события 0 1961-10-24 1 1972-07-19 2 1989-08-02 3 2022-12-26

что я хочу:

Событие Дата события Год 0 1961-10-24 1960-е 1 1972-07-19 1970-е 2 1989-08-02 1980-е 3 2022-12-26 2010-е

Код, над которым я работал:

#To datetime
df['Event.Date'] =  pd.to_datetime(df['Event.Date'])

cat_date = []
for dt in df["Event.Date"]:
    if dt < '1960-01-01' : cat_lft.append("1950's")
    elif dt < '1970-01-01': cat_lft.append("1960's")
    elif dt < '1980-01-01': cat_lft.append("1970's")
    elif dt < '1990-01-01': cat_lft.append("1980's")
    elif dt < '2000-01-01': cat_lft.append("1990's")
    elif dt < '2010-01-01': cat_lft.append("2000's")
    elif dt < '2023-01-01': cat_lft.append("2010's")
    else: cat_dt.append("nan")
        
# List as column (append)
df["Year"] = cat_date

Кто знает, что я делал не так?

Почему в 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 может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
55
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

После преобразования столбца в datetime округлите год до десятилетия и отформатируйте результат:

import pandas as pd

df = pd.DataFrame({'Event.Date': ['1961-10-24', '1972-07-19', '1989-08-02', '2022-12-26']})
df['Event.Date'] =  pd.to_datetime(df['Event.Date'])
df['Year'] = (df['Event.Date'].dt.year // 10 * 10).apply(lambda x: f"{x}'s")
print(df)

Выход:

  Event.Date    Year
0 1961-10-24  1960's
1 1972-07-19  1970's
2 1989-08-02  1980's
3 2022-12-26  2020's
Ответ принят как подходящий
import pandas as pd
    
data = {'Event': {0: 0, 1: 1, 2: 2, 3: 3},
        'Event.Date': {0: '1961-10-24',
                       1: '1972-07-19',
                       2: '1989-08-02',
                       3: '2022-12-26'}}
    
df = pd.DataFrame(data)
df['Event.Date'] = pd.to_datetime(df['Event.Date'])

print(df)
   Event  Event.Date
0      0  1961-10-24
1      1  1972-07-19
2      2  1989-08-02
3      3  2022-12-26
df['Year'] = (df['Event.Date'].dt.year // 10 * 10).astype(str) + "'s"
print(df)
   Event Event.Date    Year
0      0 1961-10-24  1960's
1      1 1972-07-19  1970's
2      2 1989-08-02  1980's
3      3 2022-12-26  2020's

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