как мне разделить два числа в пандах - PullRequest
0 голосов
/ 21 октября 2019

как разделить два числа, если длина номера равна 18. что я действительно хочу сделать, так это то, что я хочу разделить мобильный номер (10) и стационарный номер (8), когда они соединены (18).

Я пытался извлечь первые 8 номеров, но я не знаю, какприменить условие. и мне нужно удалить первые 8 чисел, если условие удовлетворяет

df['Landline'] = df['Number'].str[:8]

Я пробовал это, но я знаю, что это неправильно df['Landline'] = df['Number'].apply(lambda x : x.str[:8] if len(x)==18 )

Ответы [ 2 ]

2 голосов
/ 21 октября 2019

Для извлечения первых 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
1 голос
/ 21 октября 2019

Похоже, вам нужно

df['Landline'] = df['Number'].apply(lambda x : x[:8] if len(x)==18 else x)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...