Для извлечения первых 8 чисел используйте findall
.
df['Number'].str.findall('^\d{8}')
Решение на примере
Здесь мы используем фиктивные данные , сделанные в следующем разделе.
# separate landline and mobile numbers
phone_numbers = df.Numbers.str.findall('(^\d{8})*(\d{10})').tolist()
# store in a dict
d = dict((i, {'Landline': e[0][0], 'Mobile': e[0][1]}) for i, e in enumerate(phone_numbers))
# make a temporary dataframe
phone_df = pd.DataFrame(d).T
# update original dataframe
df['Landline'] = phone_df['Landline']
df['Mobile'] = phone_df['Mobile']
print(df)
Выход :
Numbers Landline Mobile
0 123456780123456789 12345678 0123456789
1 0123456789 0123456789
Фиктивные данные
df = pd.DataFrame({'Numbers': ['123456780123456789', '0123456789', ]})
print(df)
Выход :
Numbers
0 123456780123456789
1 0123456789