Как из колонки с датой получить только номер месяца?

Имею фрейм данных:

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(...)) - самые надежные.

→ Ссылка