gpt4 book ai didi

python - 从 pandas apply 构造一个 DataFrame

转载 作者:太空狗 更新时间:2023-10-30 02:51:39 25 4
gpt4 key购买 nike

我有一个返回纬度和经度信息的函数。我想在数据框中为这 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

我想在数据框中创建四列,这些列将为“nwlat”、“nwlon”、“selat”、“selon”创建列。

通常我会简单地返回 nwlat 然后创建一个 lambda

df['NWLong'] = df.apply(lambda row: getData(row['a'], key), axis = 1)

然后我会为我想要返回的其他 3 个变量的每个案例执行此操作。但是后来我总共运行了 4 次而不是一次。

最佳答案

你们很接近。您需要做的就是弄清楚如何适本地返回结果。您的函数需要如下所示:

def getData(address, key):
...
NW = geohash.decode(hashes.nw)
SE = geohash.decode(hashes.ne)

return pd.Series(dict(zip(fields, [NW.lat, NW.lon, SE.lat, SE.lon])))

然后您可以使用 Series.apply:

df = pd.DataFrame({'address': ['Los Angeles, CA']})  # for example
df['address'].apply(getData, key=key)

NWLat NWLong SELat SELong
0 34.0541839599609375 -118.2451629638671875 34.0541839599609375 -118.2424163818359375

这通过让 getData 返回一个 Series 对象(以 fields 作为索引)来实现。 apply 会自动构造一个 DataFrame 并返回结果。

旁注:要将这些列连接到现有的 df,请调用 pd.concat:

res = pd.concat([df, df['address'].apply(getData, key=key)], axis=1)

如果您的 DataFrame 中没有 NaN,另一种选择是使用列表理解。这是性能(和内存)微优化。

def getData2(address, key):
...
NW = geohash.decode(hashes.nw)
SE = geohash.decode(hashes.ne)

return [NW.lat, NW.lon, SE.lat, SE.lon]

pd.DataFrame([getData2(a, key) for a in df['address']], columns=fields)

NWLat NWLong SELat SELong
0 34.0541839599609375 -118.2451629638671875 34.0541839599609375 -118.2424163818359375

有关列表推导及其优势的更多信息已在我的帖子中进行了详细说明:For loops with pandas - When should I care?

关于python - 从 pandas apply 构造一个 DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54916019/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com