Вы можете изменить тип столбца «Значение» на str и сделать df с регулярным выражением. Тогда вам придется переименовать столбцы и изменить их типы обратно.
re_int = r'[A-Za-z]|(\d-\d-\d)'
re_letter = r'(^((?!\D).)*$)|(\d-\d-\d)'
re_date = r'(^((?!\D).)*$)|[A-Za-z]'
def nanify(df, regex):
return(df.replace(regex, np.NaN, regex=True))
dfv = df.Value.astype(str)
df = pd.concat([df.Name, nanify(dfv, re_int), nanify(dfv, re_date),
nanify(dfv, re_date)], axis=1)
Возможно, существует более простой способ сделать это с помощью DataFrame.where ().