gpt4 book ai didi

python - 将函数应用于 pandas 列,该函数不接受 NaN

转载 作者:太空宇宙 更新时间:2023-11-03 21:44:00 27 4
gpt4 key购买 nike

我需要将街道名称与 pandas 数据框中的 GPS 坐标相匹配。我为此使用 OSRM;我可以给 OSRM 一个 GPS 坐标列表,它会给我名称,但我的系列包含 NaN 并且 OSRM 不接受空或零,所以我需要将它们过滤掉(简单),然后将结果放回相应的位置行;我该怎么做呢?编辑:数据框中还有其他列(此处用 t 表示,但还有更多)我不能丢失。

import pandas as pd
import numpy as np
import requests
import json

path = [
51.954974, 5.857131,
51.955014, 5.860725,
np.nan, np.nan,
51.954168, 5.866390,
51.954889, 5.868611,
]
path = [ {'t': t, 'lat': c[0], 'lon': c[1]} for t, c in enumerate(zip(*[path[i::2] for i in range(2)]))]
df = pd.DataFrame(path)

path = ';'.join(list(df[pd.notnull(df.lat)].apply(lambda x: str(x.lon) + ',' + str(x.lat), axis=1)))
osrm = 'http://router.project-osrm.org' # currently down
#osrm = 'http://localhost:5000'
url = osrm + '/match/v1/car/' + path + '?overview=full&annotations=nodes&tidy=true'

# OSRM is down now but this return [ "Metamorfosenallee", "Burgemeester Matsersingel", "Burgemeester Matsersingel", "Batavierenweg" ]
matched = [tp['name'] for tp in requests.post(url).json()['tracepoints']]

# how do I now get
# t lat lon name
# 0 51.954974, 5.857131, Metamorfosenallee
# 1 51.955014, 5.860725, Burgemeester Matsersingel
# 2 np.nan, np.nan, np.nan
# 3 51.954168, 5.866390, Burgemeester Matsersingel
# 4 51.954889, 5.868611, Batavierenweg

(编辑以添加我不想丢失的额外列)

最佳答案

可能有许多更短的方法可以实现目标。但您可以尝试以下步骤。

首先,分隔包含 NaN 值的行并将其存储在 t 中。我假设 NaN 也只能发生在 latlon 中。你可以改进它。

t = df.loc[df.lat.isnull() | df.lon.isnull()]
t
lat lon
2 NaN NaN

df 中删除具有 NaN 值的行

df.dropna(inplace=True)
df
lat lon
0 51.954974 5.857131
1 51.955014 5.860725
3 51.954168 5.866390
4 51.954889 5.868611

-

在这里df完成你的工作。

-

然后最后将数据帧t排列回原始数据帧df

df = df.append(t).sort_index()
df
lat lon name
0 51.954974 5.857131 Metamorfosenallee
1 51.955014 5.860725 Burgemeester Matsersingel
2 NaN NaN NaN
3 51.954168 5.866390 Burgemeester Matsersingel
4 51.954889 5.868611 Batavierenweg

关于python - 将函数应用于 pandas 列,该函数不接受 NaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52634085/

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