如何将含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)
关键修改说明
- 替换字典生成逻辑:把原来的
x[['tide']].to_dict('r')改成了列表推导式,通过x['tide'].dropna()自动过滤掉所有NaN值,避免生成包含NaN的无效字典。 - 全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
相关产品推荐
相关产品推荐

