Решение Carolyn будет работать, но есть альтернатива, использующая функцию pandas str.extract: df['year']=df['file'].str.extract('_(\d{4})',expand=True)
Вот остальная часть кода, чтобы показать, как это работает:
files = [f"/Item/{f}.xlsx" for f in "Shirt_2016, Shirt_2017, Shoe_2018, Shoe_2019".split(', ')]
df = pd.DataFrame(files,columns=['file'])
df['year']=df['file'].str.extract('_(\d{4})',expand=True)
df
Кстати, при чтении нескольких файлов быстрее создать список, а затем выполнить конкататацию.
df = pd.concat([pd.read_excel(f).assign(file=f) for f in files])
Назначение расточительно, но читается чисто. Еще быстрее обернуть это чтение в функцию, а затем вызвать параллельное чтение: joblib.Parallel(n_jobs=-1)(joblib.delayed(read)(f) for f in files)
.
, где def read(f): df = pd.read_excel(f); df['file']=f; return df