【发布时间】:2019-03-02 08:19:10
【问题描述】:
我有以下获取IP信息的代码:
import requests
import json
import pandas as pd
import swifter
def get_ip(ip):
response = requests.get ("http://ip-api.com/json/" + ip.rstrip())
geo = response.json()
location = {'lat': geo.get('lat', ''),
'lon': geo.get('lon', ''),
'region': geo.get('regionName', ''),
'city': geo.get('city', ''),
'org': geo.get('org', ''),
'country': geo.get('countryCode', ''),
'query': geo.get('query', '')
}
return(location)
为了将其应用于整个 IP 数据帧 (df),我使用的是下一个:
df=pd.DataFrame(['85.56.19.4','188.85.165.103','81.61.223.131'])
for lab,row in df.iterrows():
dip = get_ip(df.iloc[lab][0])
try:
ip.append(dip["query"])
private.append('no')
country.append(dip["country"])
city.append(dip["city"])
region.append(dip["region"])
organization.append(dip["org"])
latitude.append(dip["lat"])
longitude.append(dip["lon"])
except:
ip.append(df.iloc[lab][0])
private.append("yes")
但是,由于 iterrows 非常慢并且我需要更高的性能,所以我想使用 swiftapply,它是 apply 函数的扩展。我用过这个:
def ip(x):
dip = get_ip(x)
if (dip['ip']=='private')==True:
ip.append(x)
private.append("yes")
else:
ip.append(dip["ip"])
private.append('no')
country.append(dip["country"])
city.append(dip["city"])
region.append(dip["region"])
organization.append(dip["org"])
latitude.append(dip["lat"])
longitude.append(dip["lon"])
df.swifter.apply(ip)
我收到以下错误: AttributeError: ("'Series' 对象没有属性 'rstrip'", '发生在索引 0')
我该如何解决?
【问题讨论】:
-
rstrip()是一个仅适用于字符串的函数。看来您正在将它与非字符串对象一起使用,但我不确定在哪里(ip.rstrip()是唯一出现的rstrip(),ip可能是字符串)
标签: python pandas loops apply swifter