I have a dataframe with datetime as index. How can I extract year and month from the index? Below is my dataframe.
1. open 2. high 3. low 4. close 5. volume
date
2019-01-07 101.64 103.2681 100.9800 102.06 35656136.0
2019-01-08 103.04 103.9700 101.7134 102.80 31294058.0
apparently df["index"].dt.month or df["date"].dt.month doesnt work.
You can take below example, However you can have the details usage from Docs pandas.DatetimeIndex
Example DataFrame:
>>> df
name age favorite_color grade birth_date
Willard Morris Willard Morris 20 blue 88 01-02-1996
Al Jennings Al Jennings 19 red 92 08-05-1997
Omar Mullins Omar Mullins 22 yellow 95 04-28-1996
Spencer McDaniel Spencer McDaniel 21 green 70 12-16-1995
1) To extract year:
>>> df['year'] = pd.DatetimeIndex(df['birth_date']).year
>>> df.head()
name age favorite_color grade birth_date year
Willard Morris Willard Morris 20 blue 88 01-02-1996 1996
Al Jennings Al Jennings 19 red 92 08-05-1997 1997
Omar Mullins Omar Mullins 22 yellow 95 04-28-1996 1996
Spencer McDaniel Spencer McDaniel 21 green 70 12-16-1995 1995
2) To extract month:
>>> df['month'] = pd.DatetimeIndex(df['birth_date']).month
>>> df.head()
name age favorite_color grade birth_date year month
Willard Morris Willard Morris 20 blue 88 01-02-1996 1996 1
Al Jennings Al Jennings 19 red 92 08-05-1997 1997 8
Omar Mullins Omar Mullins 22 yellow 95 04-28-1996 1996 4
Spencer McDaniel Spencer McDaniel 21 green 70 12-16-1995 1995 12
3) To extract year_with_month:
>>> df['month_year'] = pd.to_datetime(df['birth_date']).dt.to_period('M')
>>> df
name age favorite_color grade birth_date year month month_year
Willard Morris Willard Morris 20 blue 88 01-02-1996 1996 1 1996-01
Al Jennings Al Jennings 19 red 92 08-05-1997 1997 8 1997-08
Omar Mullins Omar Mullins 22 yellow 95 04-28-1996 1996 4 1996-04
Spencer McDaniel Spencer McDaniel 21 green 70 12-16-1995 1995 12 1995-12
Use DatetimeIndex.year and DatetimeIndex.month, dt is used for select column:
print (df.index)
1. open 2. high 3. low 4. close 5. volume
date
2019-01-07 101.64 103.2681 100.9800 102.06 35656136.0
2019-01-08 103.04 103.9700 101.7134 102.80 31294058.0
df.index = pd.to_datetime(df.index)
y = df.index.year
m = df.index.month
print (y)
Int64Index([2019, 2019], dtype='int64', name='date')
print (m)
Int64Index([1, 1], dtype='int64', name='date')
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With