Here are two ways to solve this, take your pick
df['YEARMODA'] = pd.to_datetime(df['YEARMODA'], format='%Y%m%d')
YEARMODA TEMP MAX MIN
0 1973-07-01 74.5 90.0 53.6
1 1973-07-02 74.5 88.9 57.9
2 1973-07-03 81.7 95.0 63.0
3 1973-07-04 85.0 95.0 65.8
4 1973-07-05 85.0 97.9 63.9
--------------------------------------------------------------------
from functools import partial
p = partial(pd.to_datetime, format='%Y%m%d')
df['YEARMODA'] = df['YEARMODA'].apply(p)
YEARMODA TEMP MAX MIN
0 1973-07-01 74.5 90.0 53.6
1 1973-07-02 74.5 88.9 57.9
2 1973-07-03 81.7 95.0 63.0
3 1973-07-04 85.0 95.0 65.8
4 1973-07-05 85.0 97.9 63.9
Edit: The issue you are having is you are not providing the correct format
to your pd.to_datetime
expression hence it is failing.
Edit 2: To get the std
by month according to how you want to do it you would do it as such.
df.groupby(df.YEARMODA.apply(p).dt.strftime('%B')).TEMP.std()
YEARMODA
July 5.321936
Name: TEMP, dtype: float64
df.assign(temp=pd.to_datetime(df['YEARMODA'], format='%Y%m%d') \
.dt \
.strftime('%B')) \
.groupby('temp') \
.TEMP \
.std()
temp
July 5.321936
Name: TEMP, dtype: float64