Hmm..im not sure why but here is a work around
df.loc[df['M'].notnull(), 'MN'] = pd.to_datetime('01.01.'+(df['M'].dropna().astype(int)-1).astype(str), format='%d.%m.%Y')
M MN 0 2020.0 2019-01-01 00:00:00 1 2020.0 2019-01-01 00:00:00 2 2020.0 2019-01-01 00:00:00 3 NaN NaN
One guess would be, when calling
pd.to_datetime pandas pulls from the original df instead of the sliced one.
In other workds pandas computes the operation then slices based on the loc. This explanation makes sense since
df.loc[df['M'].notnull(), 'MN'] = df['M']
works as expected
CLICK HERE to find out more related problems solutions.