Обработка пропущенных значений IP-адреса - PullRequest
1 голос
/ 27 февраля 2020

Я использую следующую функцию для преобразования IP-адреса в целочисленное значение:

def convertIpToInt(ip):
    return sum([int(ipField) << 8*index for index, ipField in enumerate(reversed(ip.split('.')))])

Функция работает нормально, но не может обработать пропущенные значения, я заполнил эти значения 0 .

Но, так как 0 не может иметь функцию разделения, возникает ошибка.

Кроме того, я хочу применить эту функцию ко всем столбцам фрейма данных, но необходимо применять отдельно для каждого столбца.

1 Ответ

1 голос
/ 27 февраля 2020

В большинстве случаев указывается, какие значения возвращаются, если функция сбоя с помощью оператора try-except:

def convertIpToInt(ip):
    try:
        return sum([int(ipField) << 8*index for index, ipField in enumerate(reversed(ip.split('.')))])
    except:
        return 0

Если хотите, также обрабатывайте пропущенные значения:

def convertIpToInt(ip):
    try:
        if pd.notna(ip):
            return sum([int(ipField) << 8*index for index, ipField in enumerate(reversed(ip.split('.')))])
        else:
            return 'missing'
    except:
        return 0

Если необходимо применить функцию для некоторые столбцы:

cols = ['col1','col2','col3']
df[cols] = df[cols].applymap(convertIpToInt)

При необходимости примените функцию для всех столбцов:

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