Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从map中提取个人收益?_Python_Pandas - Fatal编程技术网

Python 如何从map中提取个人收益?

Python 如何从map中提取个人收益?,python,pandas,Python,Pandas,我正在尝试从CSV创建国家地理位置栏 到目前为止,通过在列上映射并应用geologite()函数,我能够创建一个新列,其中包含纬度和经度 数据帧 geolocation (-34.9964963, -64.9672817) 预期输出: geolocation latitude longitude (-34.9964963, -64.9672817) -34.9964963 -64.9672817 我正在映射这些列,所以我不确定如何只获取纬度

我正在尝试从CSV创建国家地理位置栏

到目前为止,通过在列上映射并应用
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[“地理位置”]是什么?你能解释一下吗?