Python 如何从map中提取个人收益?
我正在尝试从CSV创建国家地理位置栏 到目前为止,通过在列上映射并应用Python 如何从map中提取个人收益?,python,pandas,Python,Pandas,我正在尝试从CSV创建国家地理位置栏 到目前为止,通过在列上映射并应用geologite()函数,我能够创建一个新列,其中包含纬度和经度 数据帧 geolocation (-34.9964963, -64.9672817) 预期输出: geolocation latitude longitude (-34.9964963, -64.9672817) -34.9964963 -64.9672817 我正在映射这些列,所以我不确定如何只获取纬度
geologite()
函数,我能够创建一个新列,其中包含纬度
和经度
数据帧
geolocation
(-34.9964963, -64.9672817)
预期输出:
geolocation latitude longitude
(-34.9964963, -64.9672817) -34.9964963 -64.9672817
我正在映射这些列,所以我不确定如何只获取纬度和经度,并制作它们各自的列
def add_geolocation(df, country_column):
df["geolocation"] = country_column.map(lambda x: geolocate(x))
return df
add_geolocation(df=df, country_column=df["country"])
在函数geologite()
中,我同时返回它们
def geolocate(country):
# Location
loc = geolocator.geocode(country, timeout=10000)
# Latitiude
lat = get_latitude(loc)
# Longitude
long_ = get_longitude(loc)
# Address
add = get_address(loc)
return lat, long_
我是否可以在lambda函数中指定只使用纬度
例如,
纬度,经度=地理定位(国家)
,然后只使用纬度值。您可以这样做,而不是使用地图和lambda函数:
df["latitude"] = df["geolocations"].str[0]
df["longitude"] = df["geolocations"].str[1]
正如本在评论中所说,甚至更短:
df["latitude"], df["longitude"] = df["geolocations"].str
您可以使用zip
解压geolocation
列中的元组:
def add_geolocation(df, country_column):
df["geolocation"] = country_column.map(geolocate)
df['lat'], df['long'] = zip(*df['geolocation'])
return df
编辑:zip(*df['geolocation'])
做什么?这是两个不同概念的组合:星形(*
)运算符和zip
函数
*
操作符将集合解压为位置参数。以下两个调用是等效的:
def(a,b):
返回a+b
f(1,2)#返回3
lst=[1,2]
f(*lst)#返回3
zip
函数成对返回输入集合中的元素:
zip([1,2],'A','B'],[One','Two'])#return(1,'A','One'),(2,'B','Two'))
我们将这两个元素结合在一起,将地理位置
元组的第一个元素拆分为一个单独的集合,将第二个元素拆分为另一个集合:
地理定位
(1,2)
(3,4)
(5,6)
zip(*df['geolocation'])==zip((1,2),(3,4),(5,6))==[(1,3,5),(2,4,6)]
#第一个是纬度的集合,第二个是经度
问题是什么?您好,很抱歉措辞不正确。使用lambda函数
country\u column.map(lambda x:geologite(x))
在列上映射时,我试图获取lat
和long
。问题是什么?你有什么错误吗?预期输出与实际输出是否不同?是的,它工作正常,但同时返回两者。我只是想得到纬度,然后用它做一列,经度也是一样。注意,这里根本不需要λ。只需运行country_column.map(geologice)甚至更短:df[“纬度”],df[“经度”]=df[“地理位置”]。str
谢谢你的工作,但我不确定df[“地理位置”]是什么?你能解释一下吗?