Вам следует подумать об использовании вашего регулярного выражения в методе str.extract
, имея в виду, что этот метод требует, чтобы регулярное выражение содержало хотя бы одну группу захвата.
Если вы планируете сопоставление одну, две, три или четыре цифры в начале строки, за которыми следует хотя бы один пробел (судя по вашему шаблону \d{1,4}(?=\s)
), вы должны попробовать
df['historical_rank_clean'] = df['historical_rank'].str.extract('^(\d{1,4})\s', expand=False).fillna('')
Обратите внимание на (...)
в В шаблоне партезы образуют группу захвата, и ее содержимое будет использоваться для заполнения ячеек в новом столбце historical_rank_clean
. .fillna('')
заполнит эти записи без совпадения пустой строкой.
Некоторые другие идеи регулярных выражений:
r'^(\d{2}(?:\d{2})?)\b'
- извлечь два или четыре di git фрагменты в начале строки, за которыми следует граница слова r'^((?:20|19)?\d{2})\b'
- аналогично приведенному выше, но только с учетом лет, начинающихся с 19
или 20
, если это четыре-ди git лет .
См. Демонстрацию регулярного выражения