gpt4 book ai didi

python - 如何在python 3中获取JSON的纬度和经度字段特定值?

转载 作者:太空宇宙 更新时间:2023-11-03 14:33:12 26 4
gpt4 key购买 nike

我目前正在努力从 json 中提取“point”字段的纬度和经度值。我想将每个字段值存储在两个新列中。pandas dataframe中的JSON如下:

    user_id                     timestamp   point
0 58d3ac2de04bd5249b4f6600 14567410 {'lon': 2.9546, 'lat': 41.5486}
1 58d3ac2de04bd5249b4f6600 14567410 {'lon': 2.9546, 'lat': 41.5486}
2 58d3ac2de04bd5249b4f6600 14567410 {'lon': 2.9546, 'lat': 41.5486}
3 58d3ac2de04bd5249b4f6600 14567410 {'lon': 2.9546, 'lat': 41.5486}
4 58d3ac2de04bd5249b4f6600 14567410 {'lon': 2.9546, 'lat': 41.5486}

我尝试了以下功能并且有效:

row = test["point"][0]

type(row)

row["lat"]

但现在我想用另一个函数提取,我得到新的列:

<function getLat at 0x0000000006AE2950>

<function getLon at 0x0000000006A58BF8>

功能是:

def getLat(point):
return point["lat"]

def getLon(point):
return point["lon"]

test["lat"] = test["point"].apply(lambda row: getLat)

test["lon"] = test["point"].apply(lambda row: getLon)

我得到下表:

    user_id                     timestamp   point                   lat  lon
0 58d3ac2de04bd5249b4f6600 14567410 {'lon': 2.9546, 'lat': 41.5486} <function getLat at 0x0000000006AE2950> <function getLon at 0x0000000006A58BF8>
1 58d3ac2de04bd5249b4f6600 14567410 {'lon': 2.9546, 'lat': 41.5486} <function getLat at 0x0000000006AE2950> <function getLon at 0x0000000006A58BF8>
2 58d3ac2de04bd5249b4f6600 14567410 {'lon': 2.9546, 'lat': 41.5486} <function getLat at 0x0000000006AE2950> <function getLon at 0x0000000006A58BF8>
3 58d3ac2de04bd5249b4f6600 14567410 {'lon': 2.9546, 'lat': 41.5486} <function getLat at 0x0000000006AE2950> <function getLon at 0x0000000006A58BF8>
4 58d3ac2de04bd5249b4f6600 14567410 {'lon': 2.9546, 'lat': 41.5486} <function getLat at 0x0000000006AE2950> <function getLon at 0x0000000006A58BF8>

我的代码哪里不正确?

谢谢

最佳答案

仅使用函数名称:

test["lat"] = test["point"].apply(getLat)

它与:

相同
test["lat"] = test["point"].apply(lambda x: getLat(x))

或者仅使用 lambda 函数:

test["lat"] = test["point"].apply(lambda x: x["lat"])
print (test)
user_id timestamp point \
0 58d3ac2de04bd5249b4f6600 14567410 {'lat': 41.5486, 'lon': 2.9546}
1 58d3ac2de04bd5249b4f6600 14567410 {'lat': 41.5486, 'lon': 2.9546}
2 58d3ac2de04bd5249b4f6600 14567410 {'lat': 41.5486, 'lon': 2.9546}
3 58d3ac2de04bd5249b4f6600 14567410 {'lat': 41.5486, 'lon': 2.9546}
4 58d3ac2de04bd5249b4f6600 14567410 {'lat': 41.5486, 'lon': 2.9546}

lat
0 41.5486
1 41.5486
2 41.5486
3 41.5486
4 41.5486

使用DataFrame构造函数的解决方案,pop删除原始DataFrame中的列,join用于附加到原始数据:

test = test.join(pd.DataFrame(test.pop('point').values.tolist(), index=test.index))
print (test)
user_id timestamp lat lon
0 58d3ac2de04bd5249b4f6600 14567410 41.5486 2.9546
1 58d3ac2de04bd5249b4f6600 14567410 41.5486 2.9546
2 58d3ac2de04bd5249b4f6600 14567410 41.5486 2.9546
3 58d3ac2de04bd5249b4f6600 14567410 41.5486 2.9546
4 58d3ac2de04bd5249b4f6600 14567410 41.5486 2.9546
<小时/>

另一个想法是使用json_normalize:

from pandas.io.json import json_normalize 
import json

with open('file.json') as data_file:
d = json.load(data_file)

df = json_normalize(d)
print (df)

关于python - 如何在python 3中获取JSON的纬度和经度字段特定值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47135852/

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