Чистый способ правильно проверить, не является ли номер телефона не ложным - PullRequest
0 голосов
/ 01 февраля 2019

Допустим, у меня есть фрейм данных, который выглядит следующим образом

id  phone_number  
0   5555555555
1   9082345324
2   2345098345

Я хотел бы запустить один лайнер или чистый способ сказать:

  • Если число имеетвсе те же цифры, удалите их

Вывод должен выглядеть следующим образом:

id  phone_number  
1   9082345324
2   2345098345

Мой подход заключается в использовании iterrows(), и для каждого телефонного номера каждую цифру помещают всписок и сравните список, используя lst[1:] == lst[:-1], чтобы увидеть, все ли цифры одинаковы.Если они есть, удалите эту строку из DF .. Я просто хочу более чистое решение

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Сначала преобразуйте телефонные номера в строки, если это еще не сделано.Затем вам нужно проверить количество вхождений первых character в номер телефона.Если это соответствует длине телефонного номера, эта запись должна быть удалена.

df.phone_number = df.phone_number.apply(str)
df = df.loc[~df['phone_number'].apply(lambda x: x.count(x[0]) == len(x))]

Вывод:

id  phone_number
1   1   9082345324
2   2   2345098345
0 голосов
/ 01 февраля 2019

Вы можете использовать set и проверить длину

df[df.phone_number.apply(set).str.len().gt(1)]

  id phone_number
1  1   9082345324
2  2   2345098345

Эквивалентно, используя понимание

df[[len({*x}) > 1 for x in df.phone_number]]

Если это действительные целые числа

df[df.phone_number.astype(str).apply(set).str.len().gt(1)]
# df[[len({*str(x)}) > 1 for x in df.phone_number]]

Дальнейшая пробная пробная версия при условии, что там могут быть не цифры.

df[df.phone_number.astype(str).replace('\D', '').apply(set).str.len().gt(1)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...