Как из колонки с датой получить только номер месяца?
Имею фрейм данных:
d = {'name': ['carl', 'tot', 'brick', 'rick', None], 'Date': ['11/05/2011', '9/02/2010', '1/01/2014', '12/20/2020', '9/30/2009'], 'Address': ['AR', 'YU', 'RU', 'EU', 'BY']}
df = pd.DataFrame(data = d)
Нужно в значениях колонки Date оставить только номер месяца.
Пока дошёл только до такого:
d.Date = d.Date.str.split('/\d*')
Но этот код создаёт ещё и ненужные мне пустые значения.
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
Вариант 1:
df["month"] = pd.to_datetime(df["Date"]).dt.month
результат (месяц - целое число):
In [187]: df
Out[187]:
name Date Address month
0 carl 11/05/2011 AR 11
1 tot 09/02/2010 YU 9
2 brick 11/01/2014 RU 11
3 rick 11/20/2020 EU 11
4 None 09/30/2009 BY 9
Вариант 2:
df["month"] = df["Date"].str[:2]
результат (месяц - строка):
In [190]: df
Out[190]:
name Date Address month
0 carl 11/05/2011 AR 11
1 tot 09/02/2010 YU 09
2 brick 11/01/2014 RU 11
3 rick 11/20/2020 EU 11
4 None 09/30/2009 BY 09
Вариант 3:
d = {'name': ['carl', 'tot', 'brick', 'rick', None], 'Date': ['11/05/2011', '9/02/2010', '1/01/2014', '12/20/2020', '9/30/2009'], 'Address': ['AR', 'YU', 'RU', 'EU', 'BY']}
df = pd.DataFrame(data = d)
df["month"] = df["Date"].str.extract("^(\d+)")
результат (месяц - строка):
In [208]: df
Out[208]:
name Date Address month
0 carl 11/05/2011 AR 11
1 tot 9/02/2010 YU 9
2 brick 1/01/2014 RU 1
3 rick 12/20/2020 EU 12
4 None 9/30/2009 BY 9
Вариант 4:
df["month"] = pd.to_datetime(df["Date"]).dt.strftime("%m")
результат (месяц - строка):
In [210]: df
Out[210]:
name Date Address month
0 carl 11/05/2011 AR 11
1 tot 9/02/2010 YU 09
2 brick 1/01/2014 RU 01
3 rick 12/20/2020 EU 12
4 None 9/30/2009 BY 09
PS варианты 1 и 4 (с использованием pd.to_datetime(...)) - самые надежные.