You need to enable JavaScript to run this app. 使用Python和Pandas访问JSON元素的三类操作问题咨询
优惠活动
大模型
产品
解决方案
定价
更多

使用Python和Pandas访问JSON元素的三类操作问题咨询

问题解答

1、获取coord字段的独立子元素

coord列的每一行都是字典格式,有两种常用实现方式:

  • 直接从现有coord列提取子字段:
    用.str字典访问器即可实现,示例代码:
    # 提取lon、lat为独立列
    df['lon'] = df['coord'].str['lon']
    df['lat'] = df['coord'].str['lat']
    
  • 加载数据时直接展开嵌套字段:
    用pd.json_normalize直接把嵌套的coord字段展开成顶层列,加载代码可以调整为:
    import requests
    import gzip
    from io import BytesIO
    
    url = 'http://bulk.openweathermap.org/sample/city.list.json.gz'
    resp = requests.get(url)
    decompressed_data = gzip.decompress(resp.content)
    # 展开嵌套JSON结构
    df = pd.json_normalize(pd.read_json(decompressed_data))
    
    处理后DataFrame会直接生成coord.lon、coord.lat两个独立列,直接访问即可。

2、查询结果赋值给变量的写法说明

你给出的写法是合法的,但要注意返回值的类型差异:

  • 如果你写state = df.loc[df['name'] == city, ['state']],返回的是DataFrame类型,即使只有一行结果也是表格格式
  • 如果你想要得到Series格式的结果,去掉列名外层的列表即可:state = df.loc[df['name'] == city, 'state']
  • 如果你能确定筛选结果只有1条,想要直接得到字符串/数值类型的标量结果,再加.iloc[0]取第一条即可:state = df.loc[df['name'] == city, 'state'].iloc[0]

3、多条件复合筛选实现

多个筛选条件需要用&(逻辑与)、|(逻辑或)、~(逻辑非)连接,每个条件必须用括号包裹,不能用Python原生的and/or关键字。
你需要的同时匹配城市名和州的筛选示例代码:

# 同时满足name等于指定city、state等于指定state的查询
query = df.loc[(df['name'] == city) & (df['state'] == state), ['id', 'name', 'state', 'coord']]

内容的提问来源于stack exchange,提问作者Mike Zoucha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 18:27:03