Мне нужно создать новый столбец в наборе данных, который содержит только год. Столбцы dpro
содержат больше текста, например: 1913/12/30 : classé MH. Я пробовал с другими аргументами, но чего-то не хватает, а я младший в питоне. Спасибо
Код:
monuments["year_protec"] = pd.to_datetime(monuments["dpro"], format ="%Y",errors ="coerce")
monuments.head()
Добро пожаловать в Stack Overflow! Для помощи с неработающим кодом вам нужно создать минимальный воспроизводимый пример, включая пример ввода, ожидаемый вывод и фактический вывод, или, если вы получите ошибку, полное сообщение об ошибке с трассировкой. Подробности см. в Как сделать хорошие воспроизводимые примеры панд. Вы можете редактировать. Дополнительные советы см. в статье Как спросить.
Привет, Джон, пример, dpro: 1913/12/30 : classé MH, 1932/12/29 : classé MH, 1948/04/13 : inscrit MH ... но несколько строк имеют поврежденные данные (например, ссылки на 20115 год). ), поэтому я использовал в функции errors="coerce".
Может быть, вы можете сначала попытаться очистить строку, преобразовать ее в формат datetime
и, наконец, получить часть года.
import pandas as pd
import re
s = ["1913/12/30 : classé MH", "1913/12/30 : classé MH","1913/12/30 : classé MH"]
df = pd.DataFrame({"date" : s})
#df
date
0 1913/12/30 : classé MH
1 1913/12/30 : classé MH
2 1913/12/30 : classé MH
drop = re.compile(r'[^(\d{4}\/\d{2}\/\d{2})]')
df["clean_date"] = df["date"].str.replace(drop, "")
df["year"] = pd.to_datetime(df["clean_date"], format = "%Y/%m/%d").dt.year
# df
date clean_date year
0 1913/12/30 : classé MH 1913/12/30 1913
1 1913/12/30 : classé MH 1913/12/30 1913
2 1913/12/30 : classé MH 1913/12/30 1913
Ищет в re.compile
, \d{4}\/\d{2}\/\d{2}
используется для компиляции шаблона регулярного выражения, который сообщает python найти строку, в которой соответствует правило с:
\d{4} : digit appears four times.
\/ : a slash.
\d{2} : digit appears two times.
И мы видим, что \d{4}\/\d{2}\/\d{2}
создает строку date-like
, например, 2022/04/10
.
Более того, ^
перед данным шаблоном \d{4}\/\d{2}\/\d{2}
означает, что я хочу исключить этот шаблон.
Итак, что я сделал позже, так это заменил строку шаблоном части не похоже на свидание с пустой строкой.
Что значит :
Мы можем разделить 1913/12/30 : classé MH
на две части:
1913/12/30
: дата-подобная часть.: classé MH
: не похожая на свидание часть.df["date"].str.replace(drop, "")
Код выберет not a date-like part
и заменит его на ""
.
Для получения дополнительной информации о регулярном выражении, пожалуйста, проверьте https://docs.python.org/3/library/re.html.
Большое спасибо Денни. Фантастический ваш ответ. Пожалуйста, объясните первую строку кода или какую-нибудь документацию
Не могли бы вы предоставить образец вашей колонки
dpro
?