Создать новый столбец на основе предыдущего столбца - PullRequest
2 голосов
/ 05 февраля 2020

У меня есть кадр данных, похожий на этот (с дополнительными столбцами):

srcmacaddr          dstmacaddr
00-11-2a-3b-4c-5d   22-33-6e-7f-8g-9h       
22-33-6e-7f-8g-9h   00-11-2a-3b-4c-5d       
00-11-2a-3b-4c-5d   00-99-5d-4c-3b-2a         
00-99-5d-4c-3b-2a   22-33-6e-7f-8g-9h

Я хочу l oop над каждой ячейкой для ввода запроса:

MAC_URL = 'http://macvendors.co/api/%s'.format()
r = requests.get(MAC_URL % '00-11-2a-3b-4c-5d')
r.json()

(по своему опыту я могу сделать только один раз)

Возвращает JSON объект:

{'result': {'company': 'Not-4-Real',
  'mac_prefix': '00:00:A1',
  'address': '33 NONE OF YOUR BIS AVENUE,,,US',
  'start_hex': '0000A1000000',
  'end_hex': '0000A1AAAAAA',
  'country': 'US',
  'type': 'MA-L'}}

I нужно извлечь 'company' и добавить его в новый столбец во фрейме данных:

srcmacaddr          srcCompany   dstmacaddr
00-11-2a-3b-4c-5d   Not-4-Real   22-33-6e-7f-8g-9h       
22-33-6e-7f-8g-9h   FICTITIOUS   00-11-2a-3b-4c-5d       
00-11-2a-3b-4c-5d   Not-4-Real   00-99-5d-4c-3b-2a         
00-99-5d-4c-3b-2a   SOMETHING    22-33-6e-7f-8g-9h

Если возможно, я бы хотел сделать оба src & dst в одном и том же l oop.

1 Ответ

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

Это сработало для меня,

import requests 
# Get mac address from df (src and dst)
# Load into a list
# Do request for each mac address
# Pull out company's name
# Add last 3 of mac address to the company name to make unique
#store output in a list


def mac2playa(df):
    macaddy = [*df['srcmacaddr'], *df['dstmacaddr']]
    macaddy = pd.unique(macaddy).tolist()

    maccomp = []

    MAC_URL = 'http://macvendors.co/api/%s'.format()

    for i in macaddy: 
        j = requests.get(MAC_URL % i).json()
        j = pd.DataFrame(j['result'].items())
        j = j.iloc[0][1]
        j = j + '(' + i[-8:] + ')'
        maccomp.append(j)

    rename_dict = dict(zip(macaddy, maccomp))
    return rename_dict

# create variable to store dict output
rename_dict = mac2playa(dfModbus)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...