0
我有以下數據框:加入到大熊貓據幀一列,基於字典的鍵
id ip
1 219.237.42.155
2 75.74.144.120
3 219.237.42.155
通過使用maxmindb-geolite2包,我可以找出城市特定的IP分配給。下面的代碼:
from geolite2 import geolite2
reader = geolite2.reader()
reader.get('219.237.42.155')
會返回一個字典,並通過查找鍵,其實我可以得到一個城市名:
reader.get('219.237.42.155')['city']['names']['en']
回報:
'Beijing'
我的問題是我不知道如何獲得數據幀中的每個IP的城市,並將其放在第三列,所以結果是:
id ip city
1 219.237.42.155 Beijing
2 75.74.144.120 Hollywood
3 219.237.42.155 Beijing
我是通過使用代碼映射整個字典傳送到單獨的列最遠:
df['city'] = df['ip'].apply(lambda x: reader.get(x))
在另一方面:
df['city'] = df['ip'].apply(lambda x: reader.get(x)['city']['names']['en'])
拋出一個關鍵的錯誤..我是什麼失蹤?
也許一個或多個'ip's導致'reader.get'引發異常。什麼是錯誤信息?引發了什麼異常? – unutbu
KeyError:'city'。 如果我使用try ... except子句,它僅填充空白的第三列。 – codeless
'KeyError'告訴我它正在返回一個字典,而不是您所期望的鍵。試試'lambda x:reader.get(x).get('city',dict(names = dict(en ='NA')))['names'] ['en']' – piRSquared