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