Как я могу использовать результат for-loopped print (), чтобы заполнить новый столбец в моем фрейме данных в пандах? - PullRequest
0 голосов
/ 23 сентября 2019

Я создал следующий код для подключения столбца phone_number df к API (используя «numverify»), который проверяет действительность телефонных номеров:

import urllib.parse
import requests

main_api = 'http://apilayer.net/api/validate?access_key=xxxx&'

number = file.phone_number
for n in number:

    phonenumber = urllib.parse.urlencode({'number': n})

    url = main_api + phonenumber + '&country_code=&format=1'

    numverify_data = requests.get(url).json()
    numverify_validity = numverify_data['valid']

    print(numverify_validity)

Результатом будет несколько значений true-falseвыход из json для каждого номера телефона во фрейме данных.

Я пытаюсь заменить отпечаток на

file['numverify_validity'] = print(numverify_validity)

или

file['numverify_validity'] = numverify_validity

Но новый столбецне согласуется с результатами печати. ​​

Любые идеи о том, в чем проблема?

А также, если у вас есть другие способы проверки телефонных номеров, это было бы здорово:)

ps Это первый вопрос, который я здесь задаю, поэтому, если вы считаете, что я использую неудобный формат, скажите, пожалуйста.

1 Ответ

0 голосов
/ 23 сентября 2019

Для данного кадра данных file вы определяете функцию верификации и apply для столбца number:

def verify_number(n):
    phonenumber = urllib.parse.urlencode({'number': n})
    url = main_api + phonenumber + '&country_code=&format=1'
    numverify_data = requests.get(url).json()
    return numverify_data['valid']

file['numverify_validity'] = file.number.apply(verify_number)


Возможна проверка номера телефона в автономном режимес phonenumbers (порт Python библиотеки libphonenumber от Google):
import pandas as pd
import phonenumbers as pn

file = pd.DataFrame({'number': ['+442083661177', '+12001230101']})
file['numverify_validity'] = file.number.apply(lambda x: pn.is_valid_number(pn.parse(x)))

Результат:

          number  numverify_validity
0  +442083661177                True
1   +12001230101               False


Обновление для проверки вводав соответствии с просьбой в комментарии:
import phonenumbers as pn

while True:
    try:
        number = input('Phone number: ')
        if not pn.is_valid_number(pn.parse(number)):
            raise pn.NumberParseException(None, 'invalid number')
        break
    except pn.NumberParseException:
        print('Please enter a valid phone number.')

print(number)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...