You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将含NaN值的DataFrame按组导出为指定格式的JSON

解决Pandas Groupby生成JSON时将NaN的Tide数据转为空数组的问题

针对你遇到的问题,我调整了代码逻辑,确保当分组内的tide字段全为NaN时,Tide-Data输出为空数组,而不是包含NaN的字典列表。

修改后的完整代码

import pandas as pd
import numpy as np

# 你的示例数据
data = {
    'ID': [8, 8, 10],
    'Location': ['WISMAR 2', 'WISMAR 2', 'SAN FRANCISCO'],
    'Country': ['DEU', 'DEU', 'USA'],
    'Latitude': [53.8, 53.8, 37.8],
    'Longitude': [11.4, 11.4, -122.4],
    'tide': [69.0, 68.0, np.nan]
}
df = pd.DataFrame(data)

# 核心修改的groupby逻辑
j = (df.groupby(['ID','Location','Country','Latitude','Longitude'])
     .apply(lambda x: [{"Tide": val} for val in x['tide'].dropna()] if not x['tide'].isna().all() else [])
     .reset_index()
     .rename(columns={0:'Tide-Data'})
     .to_json(orient='records', indent=2))

print(j)

关键修改说明

  1. 替换字典生成逻辑:把原来的x[['tide']].to_dict('r')改成了列表推导式,通过x['tide'].dropna()自动过滤掉所有NaN值,避免生成包含NaN的无效字典。
  2. 全NaN判断:增加了if not x['tide'].isna().all()的条件判断——如果当前分组内的tide字段全部是NaN,就直接返回空数组[],完全符合你期望的输出格式。

输出结果验证

运行后会生成你想要的JSON结构:

[
  {
    "ID": 8,
    "Location": "WISMAR 2",
    "Country": "DEU",
    "Latitude": 53.8,
    "Longitude": 11.4,
    "Tide-Data": [
      {
        "Tide": 69.0
      },
      {
        "Tide": 68.0
      }
    ]
  },
  {
    "ID": 10,
    "Location": "SAN FRANCISCO",
    "Country": "USA",
    "Latitude": 37.8,
    "Longitude": -122.4,
    "Tide-Data": []
  }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 11:17:31