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

如何在Python中将DataFrame转换为不含None/NaN的字典?

解决方案

步骤1:构造示例DataFrame

先还原你的数据结构(将id转为字符串类型以匹配预期输出格式):

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'id': [2, 3, 4, 56],
    'title': ['xyz', 'ghy', None, 'ghy'],
    'url': ['www.xyz.com', np.nan, np.nan, 'www.ghy.com'],
    'timed': ['2024-02-01T00:00:00Z', '2024-03-05T00:00:00Z', '2024-04-05T00:00:00Z', '2024-05-05T00:00:00Z']
})
# 转换id为字符串类型
df['id'] = df['id'].astype(str)

方法1:apply+字典推导式(推荐)

逐行遍历DataFrame,直接过滤掉值为None或NaN的键值对:

# 生成过滤后的字典列表
filtered_dicts = df.apply(
    lambda row: {k: v for k, v in row.items() if v is not None and not pd.isna(v)},
    axis=1
).tolist()

# 按预期格式输出每个字典
for d in filtered_dicts:
    print(d)

方法2:先转字典列表再过滤

先将DataFrame转为原始字典列表,再逐个清理无效值:

# 转为原始字典列表
raw_dicts = df.to_dict('records')

# 过滤每个字典中的None/NaN
filtered_dicts = []
for d in raw_dicts:
    cleaned = {k: v for k, v in d.items() if v is not None and not pd.isna(v)}
    filtered_dicts.append(cleaned)

# 输出结果
for d in filtered_dicts:
    print(d)

最终输出

两种方法都会得到你期望的结果:

{"id":"2","title":"xyz","url":"www.xyz.com","timed":"2024-02-01T00:00:00Z"}
{"id":"3","title":"ghy","timed":"2024-03-05T00:00:00Z"}
{"id":"4","timed":"2024-04-05T00:00:00Z"}
{"id":"56","title":"ghy","url":"www.ghy.com","timed":"2024-05-05T00:00:00Z"}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 13:46:13