我有一个函数,返回纬度和经度信息。我想在数据框中为这4个变量创建列。在
这是我的代码:
import geocoder
import pandas as pd
import geolib
from geolib import geohash
df = pd.read_csv('New_DP2.csv')
key = [redacted]
fields = ['NWLat', 'NWLong', 'SELat', 'SELong']
def getData(address, key):
g = geocoder.mapquest(address, key=key)
lat = g.lat
lng = g.lng
h = geolib.geohash.encode(lat, lng, 7)
hashes = geolib.geohash.neighbours(h)
NW = geohash.decode(hashes.nw)
SE = geohash.decode(hashes.ne)
nwlat = NW.lat
nwlon = NW.lon
selat = SE.lat
selon = SE.lon
在'nwi'中创建'nwi'列的'nwi'will create'four columns'。在
通常我只返回nwlat,然后创建lambda
^{pr2}$然后我会对我想要返回的其他3个变量的每个情况都这样做。但是我总共运行了4次而不是一次。在
你很亲密。您需要做的就是找出如何恰当地返回结果。您的功能需要如下所示:
然后可以使用
^{pr2}$Series.apply
:这是因为
getData
返回一个Series对象(以fields
作为索引)。apply
将自动构造一个数据帧并返回结果。在旁注:要将这些列连接到现有的
df
,请调用pd.concat
:另一个选择是使用列表理解,如果数据帧中没有nan。这是一个性能(和内存)微优化。在
^{4}$关于列表理解及其好处的更多信息已经在我的帖子中详细介绍:For loops with pandas - When should I care?
相关问题 更多 >
编程相关推荐