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

2024-09-26 18:18:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在处理样本数据集,以从地址中检索位置信息(出于识别目的更改了一些详细信息)

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']})

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

!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}'

我试图将该函数应用于整个熊猫系列(矢量形式),并将纬度和经度作为两个不同的列检索。以下是我的尝试:

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文件检索字段的帮助吗。谢谢


Tags: 数据keyipapi信息freeget语法
1条回答
网友
1楼 · 发布于 2024-09-26 18:18:28

该错误是由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)

相关问题 更多 >

    热门问题