StringMethods
полезны и удобны, но обычно работают не очень хорошо.
Я бы рекомендовал использовать конструктор по умолчанию и обработку строк на чистом python
df[['Machine', 'Action']] = pd.DataFrame([x.split(':') for x in df.Description]).dropna()
Сроки лучше, чем .str
опции доступа.
df = pd.concat([df]*1000)
%timeit pd.DataFrame([x.split(':') for x in df.Description]).dropna()
4.47 ms ± 252 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
%timeit df.Description.str.split(':',expand=True).dropna()
14.9 ms ± 323 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
%timeit df.Description.str.extract('(.*) : (.*)',expand=True)
16.6 ms ± 393 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
%timeit pd.concat([df, df.Description.str.extract('(?P<Machine>[^:]+)\s+:\s+(?P<Action>[^:]+)').fillna('')], axis=1)
22.5 ms ± 448 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)