我有以下数据框:
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'])
抛出一个关键错误..我错过了什么?