在 Pandas 系列上应用 .get() 函数

Applying .get() function On a Pandas series

我正在处理示例数据集以从地址中检索位置信息(为了识别目的更改了一些细节);

temp2=pd.DataFrame({'USER_ID':[1268,12345,4204,4208], 'IP_ADDR':['142.176.00.83','24.000.63.230','187.178.252.99','187.178.250.99']})

我的目标是使用 ip2geotools python 包获取纬度和经度信息。语法如下;

!pip install ip2geotools
response = DbIpCity.get(a, api_key='free')
json_file = response.to_json()

其中 a='142.176.00.83'。然后我们得到一个这样的JSON文件;

'{"ip_address": "142.176.00.83", "city": "Charlotte", "region": "Prince Edward", "country": "CA", "latitude": 46.2, "longitude": -63.131}'

我正在尝试将函数应用于整个 pandas 系列(矢量形式)并将纬度和经度检索为两个不同的列。这是我的尝试:

temp2['y'] = temp2['IP_ADDR'].apply(lambda x: DbIpCity.get(x, api_key='free'))

但它似乎不喜欢这种语法,InvalidRequestError:

但是如果我在一个字符串上执行代码,它工作正常;

DbIpCity.get('2401:4900:40cc:e9cc:6ccc:348e:4020:2593', api_key='free')

ip2geotools.models.IpLocation(2401:4900:40cc:e9cc:6ccc:348e:4020:2593)

另一方面,如果没有引号则失败;

DbIpCity.get(2401:4900:40cc:e9cc:6ccc:348e:4020:2593, api_key='free')
SyntaxError: invalid syntax

但是我的数据没有引号。如果我尝试添加引号,它会失败;

i=str(2401:4900:40cc:e9cc:6ccc:348e:4020:2593)
print("'"+str(i)+"'")      
    i=str(2401:4900:40cc:e9cc:6ccc:348e:4020:2593)
          ^
   SyntaxError: invalid syntax                      

我能否就如何矢量化此操作并从 JSON 文件中检索字段获得一些帮助。谢谢

错误是由 ip2geotools 引发的,而不是 pandas,因为 IP 格式不正确。将 IP 更改为每个部分只有一个 0 后,代码对我有用。

即将 '24.000.63.230' 更改为 '24.0.63.230'

您可以使用以下方法将此修复应用到您的数据框:

temp2['IP_ADDR'] = temp2['IP_ADDR'].replace(r'\.0+\.', '.0.', regex=True)