Working with Pandas dataframe and IPinfo’s API

If you want to use Pandas to do analysis on IP Geolocation, we suggest, using IPinfo’s
Python module
with the bulk/batch lookup method, getBatchDetails, even if you have a single IP address.

The reason for that is the getBatchDetails returns a dictionary of dictionary with the IP Address as the key, and the geolocation information as the value. This makes it fairly easy to convert to a Pandas dataframe and the column name gets assigned to the IP address.

For example:

# install with `pip install ipinfo`
import ipinfo
import pandas as pd

# initialize handler with access token
access_token = "insert_your_token_here"
handler = ipinfo.getHandler(access_token)

# declare the ip address list
# randomly generated IP addresses
ip_addresses = ['169.7.127.160', '90.130.144.160', '77.45.221.129', '27.167.41.249']

# do the IP address batch lookup
ip_data = handler.getBatchDetails(ip_addresses)

# convert it to a dataframe
df = pd.DataFrame(ip_data) # the default column names are the IP Addresses

# transposing the dataframe
df_trasposed = df.T # the IP Addresses will be the index column

When you lookup an IP address with getBatchDetails it returns the response like so -

{'18.236.88.186': {'ip': '18.236.88.186',
  'hostname': 'ec2-18-236-88-186.us-west-2.compute.amazonaws.com',
  'city': 'Boardman',
  'region': 'Oregon',
  'country': 'US',
  'loc': '45.8399,-119.7006',
  'org': 'AS16509 Amazon.com, Inc.',
  'postal': '97818',
  'timezone': 'America/Los_Angeles',
  'country_name': 'United States',
  'latitude': '45.8399',
  'longitude': '-119.7006'}}

Passing the getBatchDetails to Pandas.DataFrame and transposing the dataframe will generate a dataframe like this:

ip hostname city region country loc org postal timezone country_name latitude longitude
64.19.55.14 64.19.55.14 http://64.19.55.14.nw.nuvox.net/ Little Rock Arkansas US 34.7871,-92.4222 AS7029 Windstream Communications LLC 72212 America/Chicago United States 34.7871 -92.4222
42.41.253.238 42.41.253.238 nan Seoul Seoul KR 37.5660,126.9784 AS9644 SK Telecom 03141 Asia/Seoul South Korea 37.566 126.978
44.141.143.69 44.141.143.69 nan San Diego California US 32.7157,-117.1647 AS16175 Signal Bredband AS 92101 America/Los_Angeles United States 32.7157 -117.165
18.236.88.186 18.236.88.186 http://ec2-18-236-88-186.us-west-2.compute.amazonaws.com/ Boardman Oregon US 45.8399,-119.7006 AS16509 http://amazon.com/, Inc. 97818 America/Los_Angeles United States 45.8399 -119.701
5.186.177.43 5.186.177.43 nan Taastrup Capital Region DK 55.6501,12.3016 AS44869 FIBIA P/S 2630 Europe/Copenhagen Denmark 55.6501 12.3016